0

可能重复:
为什么在 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() 在派生和模式中也是公共的继承是公开的,为什么我仍然得到我想要的结果..我应该像前一种情况一样收到编译错误吗?

我很困惑..请告诉我编译器在这种情况下是如何工作的..??

4

1 回答 1

2

当存在私有继承时,不能让基指针指向派生对象。

公共继承表示一个isa关系。另一方面,私有继承表示关系方面实现

编译错误是指以下行: ptr = new derived;

于 2010-09-09T12:31:49.810 回答