C/C++教程

C++类继承和组合的初始化顺序

本文主要是介绍C++类继承和组合的初始化顺序,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

当一个类继承于其他类,并且类中有类对象作为成员,这种情况下该类的初始化顺序为:先初始化继承的类,顺序按照继承的顺序从前到后,然后初始化类成员,顺序按照定义的顺序;

举例:

假设有3个基类,分别为Base1,Base2,Base3,三个类中均在构造函数和析构函数中打印出信息标识当前的执行顺序;类Derive继承自这3个类,且有这3个类的成员;

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 class Base1
 6 {
 7 private:
 8     int i;
 9 public:
10     Base1(int i) : i(i) {
11         cout << "Base1 Constructor.." << endl;
12     }
13     ~Base1() { cout << "Base1 Destructor.." << endl; }
14 };
15 
16 class Base2
17 {
18 private:
19     int s;
20 public:
21     Base2(int s) : s(s) {
22         cout << "Base2 Constructor.." << endl;
23     }
24     ~Base2() { cout << "Base2 Destructor.." << endl; }
25 };
26 
27 class Base3
28 {
29 public:
30     Base3() {
31         cout << "Base3 Constructor.." << endl;
32     }
33     ~Base3() { cout << "Base3 Destructor.." << endl; }
34 };
35 
36 class Derive : public Base2, public Base1, public Base3
37 {
38 public:
39     Derive(int a, int b, int c, int d): Base1(a), member2(d), member1(c), Base2(b){}
40 private:
41     Base1 member1;
42     Base2 member2;
43     Base3 member3;
44 };
45 
46 int main()
47 {
48     Derive obj(1, 2, 3, 4);
49 
50     return 0;
51 }

代码如上,debug结果如下:

定义Derive类的对象,首先进入Derive类的构造函数:

 

单步进入:

 

进入Base2的构造函数,因Derive类继承顺序依次为Base2--Base1--Base3,

继续执行,进入Base1的构造函数:

 

 

继续执行进入Base3的构造函数:

 

初始化完继承的3个类后,开始初始化类内成员,按照定义顺序,接下来单步执行,进入:

 

继续执行进入:

 

继续执行进入:

 

 虚构顺序与上相反;

执行结果如下:

 

这篇关于C++类继承和组合的初始化顺序的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!