c++ - C++中同时的私有(private)和公共(public)继承

标签 c++ inheritance virtual-functions virtual-inheritance private-inheritance

假设类 Y 公开继承了类 X。类 Z 是否可以在公开继承 X 的同时私有(private)继承 Y

为了更清楚地说明这一点,假设 X 定义了公共(public)方法 x1x2Y 继承X,覆盖x1 并提供方法y。 C++ 是否允许第三个类 ZYx1 实现的方式继承 Yy 是私有(private)的,而外界只看到它公开继承了 X,即只有一个公共(public)方法 x2?

最佳答案

是的,这叫做虚拟继承。

struct X {
  virtual void x1();
  void x2();
};

struct Y : virtual X {
  void x1(); // overrides
  void y();
};

struct Z : private Y, virtual X { 

};

人们不能执行 z.y()z.x1() 但他们可以执行 z.x2() 并且可以将 code>Z*X*。然而,一旦他们这样做,他们当然可以调用 converted->x1() converted->x2()

你没有说任何关于你的目标,但听起来你真的想保留 Y 作为指针

struct X {
  virtual void x1();
  void x2();
};

struct Y : X {
  virtual void x1(); // overrides
  void y();
};

struct Z : X { 
  virtual void x1() { // overrides
    /* uses y->x1 */ 
  }
  Y *y;
};

这对我来说看起来更熟悉。

关于c++ - C++中同时的私有(private)和公共(public)继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4546340/

相关文章:

c++ - 使用 Boost 图库的 adjacency_matrix

.net - 如何查找哪些类实现了接口(interface) (.Net)

c++ - 在构造对象时定义成员函数

inheritance - 在 Objective-C++ 应用程序中接收 C++ 虚拟方法调用的正确方法是什么?

c++ - x64 DLL 导出函数名称

c++ - 随时随地压缩/解压缩数据

c++ - 串口通讯

python - Python 中的抽象方法继承

java - 实例化通用抽象类的子(具体)类,其构造函数需要其他参数类

c++ - 如何使用虚函数对基类进行抽象?