我有简单的代码,我认为那是失败的。
我已经从Shield
私下继承了Sealer
,甚至Shield
不是它的friend
,我仍然能够创建Shield
的对象。
class Sealer
{
public:
Sealer()
{
cout<<"base constructor;"<<endl;
}
};
class Shield : private Sealer
{
public:
void p()
{
cout<<"P gets called;"<<endl;
}
};
int main()
{
Shield d; //success here
d.p(); // here too
return 0;
}
怎么可能?基类构造函数不应访问。是不是
我正在使用Visual Studio 2012。
最佳答案
class Shield : private Sealer
表示Sealer
中的所有内容在Shield
中保持私有;在Shield
之外或从其派生的类中无法看到它。
它不会神奇地返回并使Sealer
的构造函数私有,以便Shield
无法访问它。如果子类无法从基类访问任何内容,私有继承的意义是什么?它什么也做不了。