2011-08-16 68 views
5

这里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和虚拟D'TOR。输出如下:

A 
B 
C 
E 
D 
F 
G 
H 
~H 
~G 
~F 
~D 
~E 
~C 
~B 
~A 
Press any key to continue . . . 

但是根据引用虚拟基类的构造函数应该先执行。

我究竟是什么错误?

编辑:要清除我的问题,根据我的理解,这种行为与基类是否为虚拟无关。但引用坚持虚拟基类。我清醒还是有什么可疑的?

谢谢。

+0

请提供您使用的代码以获得更准确的答案。 – amit

+0

@amit,这里不需要代码。预期这种行为... – eran

回答

3

如果虚拟基类继承自的类不是先构建的,则无法构造虚拟基类。因此,在你的情况下,非虚拟基类被构建,因为虚拟基类依赖它们:C不能构造,直到AB。因此,AB确实是在C之前构建的,尽管C实际上是继承的。

+1

这是在任何scenerio。为什么这个短语被添加到层次结构中的任何地方? – Azodious

+1

@有趣,C++ FAQ很棒,但我想在这种情况下,缺乏进一步的解释实际上可能会有些误导。虚拟基础类首先在任何地方构建,但是构建它们涉及构建它们的基础,就像在任何情况下一样。没有其他的方法可以工作,因为类必须能够依赖其初始化的基础。 – eran

+0

好的...清除它。谢谢。 – Azodious