当访问说明符为私有时,派生类函数甚至无法访问基类的公共成员。但是我的派生类的函数“xyz
”能够调用“showofb
”怎么办?
我甚至通过在C的构造函数中调用函数“showofb
”来尝试它。在这两种情况下它都有效。
如何调用函数“showofb
”?
class B
{
public:
B()
{
cout<<":B:"<<endl;
}
void showofb()
{
cout<<"show of b"<<endl;
}
};
class C : private B
{
public:
C()
{
cout<<":C:"<<endl;
}
void xyz()
{
showofb();
}
};
int main()
{
C c1;
c1.xyz();
}
答案 0 :(得分:3)
私有继承继承父级的公共成员作为子级的私有成员。一个类可以调用自己的或继承的私有成员。
考虑一下:
class B
{
public:
B()
{
cout<<":B:"<<endl;
}
void showofb()
{
cout<<"show of b"<<endl;
}
};
class C : private B
{
public:
C() {}
};
class D : public B
{
public:
D(){};
}
int main()
{
C c1;
c1.showofb(); // WONT WORK
D d1;
d1.showofb(); // WILL WORK
}
答案 1 :(得分:1)
B::showofb()
是一个公共职能部门。所以它可以被C
调用。如果您修改B
以使showofb
变为私有,C
将无法再调用它。
私有继承意味着B
的所有公共成员和受保护成员都被C
作为私有继承。因此,C
仍然可以调用B
的公开成员和受保护成员,但是从C
派生的任何类都无法调用B
的成员。
答案 2 :(得分:0)
user1001204,您似乎有一个错误的私有继承概念。该类C
通过私有继承继承自类B
意味着继承关系对使用类C
的任何内容隐藏。私有继承不会隐藏类C
本身内的继承关系。