<分区>
Possible Duplicate:
Why is this not allowed in 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 并且声明 ((派生 *)ptr)->func();正在尝试显示 derived 的 func() ..为什么由于继承模式存在可访问问题..继承模式(私有(private))如何影响调用,尽管我已经有 public derived func () 在派生类中..?
如果将继承模式更改为公开,我会得到我想要的结果..但是 func() 在 base 中是私有(private)的(因此 base 的 func() 不被继承)并且 func() 在派生中也是公开的并且继承模式是public 为什么我仍然得到我想要的结果..我应该像以前的情况一样得到一个编译错误吗??
我完全糊涂了..请告诉我编译器在这种情况下是如何工作的..??