可能的重复:
为什么在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;

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top