虚拟继承一个类就够了吗?(Virtual Inheritance, one class enough

2019-08-03 15:34发布

我理解虚拟继承的概念,但我无法找到这个问题的答案的任何地方。 假设你有一流的d它继承类B和C B和C类继承A.所以,你可以把B和C几乎继承,以避免A的两个实例,但你必须在B和C指定虚拟继承或者它已如果这两个中的一个虚拟继承A和其他不创建只有一个实例?

谢谢

Answer 1:

他们必须是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 { /* ... */ };

对于类的对象AA ,基类的所有虚拟出现B在的类晶格AA对应于单个B类型的对象内子对象AA ,和一个(非虚拟)基类的每一个其它存在B在类的晶格AA对应一个对一具有鲜明的B类型的对象内的子对象AA 。 鉴于类AA如上文所定义,类AA具有类的两个子对象BZB和虚拟B通过共享XY ,如下所示。



Answer 2:

你需要指定虚拟继承了B和C有一个A.否则未使用虚拟继承会“分享”类A的类

这可以使一个有以下几点:

为什么你想这样做又是另一回事。



文章来源: Virtual Inheritance, one class enough?