在多继承方案中使用虚拟基类时,是否必须引用虚拟基类?

时间:2013-01-11 23:19:37

标签: c++ virtual-inheritance

美国空军的JSF C ++编码标准要求为访问虚拟基地的每个派生类声明虚拟基类。

例如,在以下层次结构中:

  A
 / \
B1  B2
C1  C2
 \ /
  D

......他们在此标准中强加的规则(AV规则88.1,供参考),要求按类声明类:

class A;
class B1 : virtual A;
class B2 : virtual A;
class C1 : B1, virtual A;
class C2 : B2, virtual A;
class D  : C1, C2, virtual A;

我的问题如下:

  1. 这在语义上是否只与声明@ B1 / B2中的虚拟继承有关,而在每个后续的类声明中都没有指定virtual A
  2. 如果它在语义上有所不同,为什么有人/想要/将其关闭?对我来说,在每一层继承都必须这样做,这似乎很愚蠢,因为这会增加一个潜在的失败点。

1 个答案:

答案 0 :(得分:1)

它在语义上是相同的,因为每个派生类将具有一个类型为A的虚拟基础。明确提到虚拟基础非常好,因为派生最多的类构造虚拟基础(与非虚拟基础不同),在编写派生类的构造函数时,构造顺序很重要。 / p>

我没有(2)的技术答案。你不必这样做,但如果你这样做会很好。我想,就像打电话给你的父母一样。与许多事情一样,C ++并没有强迫你合理。