可能重复:
为什么在 C++ 中不允许这样做?
为什么在 C++ 中不允许这样做...??
class base
{
private:
public:
void func()
{
cout<<"base";
}
};
class derived : private base
{
private:
public:
void func()
{
cout<<"derived";
}
};
int main()
{
base * ptr;
ptr = new derived;
((derived *)ptr)->func();
return 0;
}
我收到一个错误
**61 C:\Dev-Cpp\My Projects\pointertest.cpp `base' is an inaccessible base of `derived'**
我的问题是,由于 func() 在派生类中定义为public并且语句 ((derived *)ptr)->func(); 正在尝试显示派生的 func() ..为什么由于继承模式而存在可访问问题..尽管派生类中已经有公共派生 func() ,但继承模式(私有)如何影响调用.. ?
如果将继承模式更改为公共,我会得到我想要的结果。但是如果 func() 在 base 中是私有的(因此 base 的 func() 不是继承的)并且 func() 在派生和模式中也是公共的继承是公开的,为什么我仍然得到我想要的结果..我应该像前一种情况一样收到编译错误吗?
我很困惑..请告诉我编译器在这种情况下是如何工作的..??