继承方面的典型问题[重复
-
01-10-2019 - |
题
可能的重复:
为什么在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() 上市 在派生类和语句((派生 *)ptr) - > func();正在尝试显示func() 衍生的..为什么由于继承模式引起的问题。
如果将继承模式更改为公共继承是 上市 为什么我仍然得到所需的结果。
我完全困惑..请告诉我,在这种情况下,编译器的工作原理。
解决方案
当有私有继承时,您不能让基本指针指向派生对象。
公共继承表达 伊萨 关系。另一方面,私人继承表示 根据 关系
汇编错误是指该行:ptr = new derived;
不隶属于 StackOverflow