给定两个具有公共(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 {};
第一个也是直接从虚拟基类派生的,但我认为这没有影响,因为它与 Derived1
和 Derived2
共享。
最佳答案
他们说的是同一件事。唯一的区别是,如果您从 Derived3
的两个定义中删除了 public Derived1
和 public Derived2
,第一个仍然会继承自 Base
和第二个不会。
编辑:我没有仔细考虑是否存在一些奇怪的交叉转换情况,两者也会有不同的行为,尽管我认为没有。
关于C++虚继承区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39126081/