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

Posted 8号prince

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了继承和组合混搭的情况下,构造和析构函数的调用顺序相关的知识,希望对你有一定的参考价值。

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

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

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

 

例如下面一段代码:

 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

 

以上是关于继承和组合混搭的情况下,构造和析构函数的调用顺序的主要内容,如果未能解决你的问题,请参考以下文章

继承+组合关系下的构造和析构

多继承的构造和析构函数调用顺序

C++基础6 继承 类型兼容 satatic 多继承 虚继承 多态 案例 虚析构函数 重载重写重定义

C++笔记--面向对象(OOP)编程基础--类的继承及多态

构造函数和析构函数能不能被继承

[类和对象]构造和析构