【发布时间】:2011-04-10 05:40:53
【问题描述】:
为什么在 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()..为什么由于继承模式而存在可访问问题..尽管我已经有公共派生 func,但继承模式(私有)如何影响调用() 在派生类中..?
如果将继承模式更改为公共,我会得到我想要的结果..但是 func() 在 base 中是私有的(因此 base 的 func() 不是继承的)并且 func() 在派生中是公共的和继承模式是public为什么我仍然得到我想要的结果..我应该像以前的情况一样得到一个编译错误吗??
我完全糊涂了..请告诉我编译器在这种情况下是如何工作的..??
【问题讨论】:
-
看起来也很像家庭作业
-
不是重复的,其他线程没有演员表。
-
提示:不是
func无法访问。再次阅读错误消息,并检查它指的是哪一行。 -
@Philipp 你是认真的 :) 吗?我认为他只是绝望地添加了演员,希望它能解决错误。
标签: c++ inheritance pointers derived-class