继承和组合混搭的情况下,构造和析构函数的调用顺序

继承和组合混搭的情况下:

        构造时,先调用父类的构造函数(如果父类还有父类,先执行父类的父类的构造函数,在执行父类的构造函数),再调用组合对象的构造函数,最后调用自己的构造函数;

        析构时,先调用自己的析构函数,再调用组合对象的析构函数,最后调用父类的析构函数(如果父类还有父类,先执行父类的析构函数,再执行父类的父类的析构函数)。

例如下面一段代码:

 1 #include<iostream>
 2 using namespace std;
 3 
 4 class Object
 5 {
 6 public:
 7     Object(int _x,int _y):x(_x),y(_y){cout<<"Object的构造函数"<<x<<" "<<y<<endl;}
 8     ~Object(){cout<<"Object的析构函数"<<x<<" "<<y<<endl;}
 9 
10 private:
11     int x;
12     int y;
13 };
14 
15 
16 
17 
18 class Parent:public Object
19 {
20 public:
21     Parent(int _a,int _b):Object(1,2),a(_a),b(_b){cout<<"Parent的构造函数"<<endl;}
22     ~Parent(){cout<<"Parent的析构函数"<<endl;}
23 
24 private:
25     int a;
26     int b;
27 };
28 
29 class Child:public Parent
30 {
31 public:
32     Child(int _a,int _b,int _c):Parent(_a,_b),obj(3,4),c(_c)
33     {
34         cout<<"Child的构造函数"<<endl;
35     }
36     ~Child(){cout<<"Child的析构函数"<<endl;}
37 
38 protected:
39     Object obj;
40 
41 private:
42     int c;
43 };
44 
45 int main()
46 {
47     Child c(1,2,3);
48 
49     return 0;
50 }

代码的执行结果是:

   Object的构造函数1  2

   Parent的构造函数

   Object的构造函数3  4

   Child的构造函数

   Child的析构函数

   Object的析构函数3  4

   Parent的析构函数

   Object的析构函数1  2

原文地址:https://www.cnblogs.com/jswu-ustc/p/8386278.html