此处http://www.parashift.com/c++-faq-lite/multiple-inheritance.html部分[25.14]说
要执行的第一个构造函数是层次结构中任何位置的虚拟基类。
我尝试使用以下程序验证它:
A (pure virtual)
|
B
|
C
(virtual)/ \ (virtual)
E D
\ /
F
|
G (pure virtual)
|
H
每个班级都有一个c'tor和virtual d'tor。输出如下:
A
B
C
E
D
F
G
H
~H
~G
~F
~D
~E
~C
~B
~A
Press any key to continue . . .
但是根据引用,应该首先执行虚拟基类构造函数。
我做错了什么?
编辑:要清除我的问题,根据我的理解,此行为与基类是否为虚拟无关。但引用坚持虚拟基类。我清楚还是在那里钓鱼?
感谢。
答案 0 :(得分:3)
如果不首先构造它们继承的类,则无法构造虚基类。因此,在您的情况下,构建非虚拟基类是因为虚拟基类依赖于它们:C
和A
之前无法构建B
。因此,A
和B
确实在C
之前构建,即使C
实际上是遗传的。