C++虚继承区别

标签 c++ inheritance diamond-problem

给定两个具有公共(public)虚拟基类的类:

class Base {};

class Derived1 : public virtual Base {};

class Derived2 : public virtual Base {};

这两个进一步派生类之间有什么区别吗?:

  • class Derived3 : public virtual  Base, public Derived1, public Derived2 {};
    
  • class Derived3 : public Derived1, public Derived2 {};
    

第一个也是直接从虚拟基类派生的,但我认为这没有影响,因为它与 Derived1Derived2 共享。

最佳答案

他们说的是同一件事。唯一的区别是,如果您从 Derived3 的两个定义中删除了 public Derived1public Derived2,第一个仍然会继承自 Base 和第二个不会。

编辑:我没有仔细考虑是否存在一些奇怪的交叉转换情况,两者也会有不同的行为,尽管我认为没有。

关于C++虚继承区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39126081/

相关文章:

C++ 继承父 "knowing"的 child

python - Python中的一对一继承

c++ - 从C++ 17开始的prvalue差异中的直接列表初始化与复制列表初始化与复制初始化的示例

c++ - 表达式 : String Subscript Out of Range

java - 扩展变量和协变返回类型

c++ - 指向尚未初始化的成员

c++ - 在模板类中 boost 模板相关结构的多索引容器

c++ - 使用 auto 声明 block

C++ 死亡钻石

C++ virtual Diamond 继承