C++类继承和组合的初始化顺序
2022/2/21 22:28:36
本文主要是介绍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++类继承和组合的初始化顺序的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-07fastcgi 是什么-icode9专业技术文章分享
- 2024-10-07fastcgi 的详细使用教程介绍-icode9专业技术文章分享
- 2024-10-07git如何更新单个文件到本地-icode9专业技术文章分享
- 2024-10-07如何使用ASM(Abstract Syntax Tree Manipulation)技术来修改第三方AAR依赖中的函数-icode9专业技术文章分享
- 2024-10-07Activity 跳转时间耗时很长怎么优化解决-icode9专业技术文章分享
- 2024-10-07Androud Toast 有哪些常用的第三方组件-icode9专业技术文章分享
- 2024-10-07在viewmodel中怎么使用 mmkv?-icode9专业技术文章分享
- 2024-10-07MMKV.defaultMMKV() 是单例模式吗?-icode9专业技术文章分享
- 2024-10-04el-table 开启定时器下,表格的选中状态会消失是什么原因-icode9专业技术文章分享
- 2024-10-03如何安装和初始化飞牛私有云 fnOS?-icode9专业技术文章分享