继承的典型问题

时间:2010-09-09 12:14:33

标签: c++ inheritance pointers derived-class

  

可能重复:
  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 ((derived *)ptr) - &gt; func();试图显示派生的func()..为什么由于继承模式存在可访问的问题。继承模式(私有)如何影响调用虽然我已经有公共派生函数()派生类..?

如果继承模式改为public,我得到了我想要的结果。但是func()在base中是私有的(因为base的func()没有被继承)并且func()在派生时也是公共的和继承模式是公开为什么我仍然得到我想要的结果..我是否会像上一个案例那样得到编译错误?

我完全糊涂了。请告诉我编译器在这种情况下是如何工作的。??

1 个答案:

答案 0 :(得分:2)

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

公共继承表示 isa 关系。另一方面,私有继承表示根据关系

实现的

热编译错误指的是: ptr = new derived;