c++ - 继承的典型问题

标签 c++ inheritance pointers derived-class

<分区>

Possible Duplicate:
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 并且声明 ((派生 *)ptr)->func();正在尝试显示 derived 的 func() ..为什么由于继承模式存在可访问问题..继承模式(私有(private))如何影响调用,尽管我已经有 public derived func () 在派生类中..?

如果将继承模式更改为公开,我会得到我想要的结果..但是 func() 在 base 中是私有(private)的(因此 base 的 func() 不被继承)并且 func() 在派生中也是公开的并且继承模式是public 为什么我仍然得到我想要的结果..我应该像以前的情况一样得到一个编译错误吗??

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

最佳答案

在有私有(private)继承的情况下,不能让基指针指向派生对象。

公共(public)继承表达了一种isa 关系。另一方面,私有(private)继承表达了一种根据关系实现

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

关于c++ - 继承的典型问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3676401/

相关文章:

c - 如何将 .txt 文件的内容打印为字符串?

java - SWIG 将生成的类从不同的模块和包导入当前类

c++ - 如何在调用派生类构造函数之前设置基类成员?

c++ - std::vector在push_back和insert(end(),x)之间不一致崩溃

php - 使 DateTime::createFromFormat() 返回子类而不是父类

java - Java中的继承(设计模式)

c - 是否可以在执行期间永久更改指针类型? (C语言编程)

c - 为什么 malloc 和 free 有不同的返回类型?

c++ - 计算鼠标点击次数 C

c++ - 使用带有 soci::indicators [C++] 的 SOCI 从表中获取行