0

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

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

  A
 / \
B1  B2
C1  C2
 \ /
  D

...他们在本标准中强加的规则(AV Rule 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. 如果它在语义上有所不同,为什么会有人/想要/离开它?对我来说,您绝对必须在每一层继承中都这样做似乎很愚蠢,因为这会增加潜在的故障点。
4

1 回答 1

1

它在语义上是相同的,因为每个派生类都将有一个类型为 的虚拟基类A。显式提及虚基非常好,因为派生最多的类构造虚基(与非虚基不同),并且在编写派生类的构造函数时要牢记构造顺序很重要。

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

于 2013-01-11T23:23:23.850 回答