构造函数调用顺序

建立派生类对象时,构造函数调用顺序为:基类构造函数,成员对象构造函数,派生类构造函数

 1. 如果一个类有多个基类,基类的构造函数在继承类的构造函数之前被调用。基类的构造函数以被声明的顺序被调用。

 class A1

class A2

class A3

class B: A2,A1,A3

{

A1 ma1;

A2 m2;

A3 m3;

};

B b; //构造函数调用顺序为:A2 A1 A3 A1 A2 A3 B

 

2. 虚基类的构造函数在任何非虚基类构造函数前调用。如果构造中包括多个虚基类,它们的调用顺序以声明顺序为准。如果虚类是由非虚类派生而来,那非虚类的构造函数要先被调用。

class X : public Y, virtual public Z X one;

调用顺序如下:

Z(); // 虚基类初始化 Y(); // 非虚基类 X(); // 继承类

下面是一个复杂的例子:

class base; class base2; class level1 : public base2, virtual public base; class level2 : public base2, virtual public base; class toplevel : public level1, virtual public level2; toplevel view;

构造函数调用顺序如下:

base(); // 虚基类仅被构造一次 base2(); level2(); // 虚基类 base2(); level1(); toplevel();

如果类继承中包括多个虚基类的实例,基类只被初始化一次

你可能感兴趣的:(构造函数调用顺序)