Inv*_*lid 10 c++ multiple-inheritance virtual-inheritance
我理解虚拟继承的概念,但我无法在任何地方找到答案.假设您有继承B类和C类的D类.B和C都继承A类.所以你可以让B和C虚拟继承A以避免A的两个实例.但是你必须在B和C都指定虚拟继承吗?或者,如果两个中的一个实际上继承了A而另一个没有,那么它是否只创建了一个A实例?
谢谢
Bil*_*eal 14
他们必须都是virtual
.从C++ 11 10.1 [class.mi]/7:
类可以包含给定类型的虚拟和非虚拟基类.
class B { /* ... */ };
class X : virtual public B { /* ... */ };
class Y : virtual public B { /* ... */ };
class Z : public B { /* ... */ };
class AA : public X, public Y, public Z { /* ... */ };
Run Code Online (Sandbox Code Playgroud)
对于类的一个对象AA
,基类的所有虚拟出现B
在的类晶格AA
对应于单个B
类型的对象中的子对象AA
,和一个(非虚拟)基类的每一个其它存在B
于的类晶格AA
对应一对- B
在类型对象中使用不同的子对象AA
.鉴于类AA
定义如上,类AA
具有类的两个子对象B
:Z
的B
和虚拟B
通过共享X
和Y
,如下所示.