虚拟继承中的构造函数顺序

Xia*_*Jun 7 c++

我是C++的新生,特别是关于面向对象的编程.现在我在学习期间遇到了问题.

下面是一个类层次结构:

class Class{};

class Base:public Class{};

class Derived1:virtual public Base{};

class Derived2:virtual public Base{};

class MI:public Derived1,public Derived2{};

class Final:public MI,public Class{};
Run Code Online (Sandbox Code Playgroud)

现在我想知道Final类对象定义的构造函数的顺序是什么.

我画了一个图: 在此输入图像描述 类继承的结构http://hi.csdn.net/attachment/201203/16/2712336_1331902452BziD.jpg

我知道虚拟基类总是在非虚基类之前构建,而不管它们在继承层次结构中出现的位置.我感到困惑的是,如果Class类的构造函数在Base之前,并且如果Class的构造函数被调用两次.为什么?

有人可以告诉我答案吗?越详细越好.

Ste*_*sop 8

直接继承Classby FinalBase不是virtual,所以一个实例Final两个类型的基类子对象Class.作为直接基础的那个Base之前是构造的Base,并且Final之后构建了直接基础的那个(实际上在之后MI).

原因是:

  1. 直接基地按照它们列出的顺序构建(除非它们是已经构建的虚拟基础),
  2. base是在类自己的构造函数运行之前构造的.

应用(1)Final告诉我们Class之后构造的MI.多次应用(2)告诉我们Class在之前Base,之前Derived1Derived2之前构造MI.