在多重继承场景中使用虚拟基类时,是否所有派生类都必须引用虚拟基类? 美国空军的JSF C++编码标准要求为访问虚拟基础的每个派生类声明虚拟基类。
例如,在以下层次结构中:在多重继承场景中使用虚拟基类时,是否所有派生类都必须引用虚拟基类? 美国空军的JSF C++编码标准要求为访问虚拟基础的每个派生类声明虚拟基类。,c++,virtual-inheritance,C++,Virtual Inheritance,例如,在以下层次结构中: 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; 我的问题如下: 这在语义上是否不同于仅在声明@B1/B2中进
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;
我的问题如下:
virtuala
它在语义上是相同的,因为每个派生类将恰好有一个
A
类型的虚拟基。显式地定义虚拟基非常好,因为派生最多的类构造虚拟基(与非虚拟基不同),并且在编写派生类的构造函数时,必须记住构造顺序
我没有(2)的技术答案。你不必这么做,但如果你这么做了就太好了。比如给你父母打电话,我想。与很多事情一样,C++并不能强迫你讲道理。我希望我能再给1的笑声。但是,非常严肃地说,我想要一个小小的澄清。为什么您会关心最派生的类型是否构造虚拟基?您是否仍有可能最终得到两个
A
s?@BrianVandenberg:没有,但是您必须小心初始化顺序,并且您必须记住,只有派生最丰富的类才能构造(唯一的)虚拟基。想想中间阶层对此的感受。一个非平凡的例子需要一点代码来解释,但同样,虚拟继承从一开始就是一个非常神秘的语言特性。。。但是试着自己解决,看看顺序有多重要。