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++类继承和组合的初始化顺序的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-10Rakuten 乐天积分系统从 Cassandra 到 TiDB 的选型与实战
- 2025-01-09CMS内容管理系统是什么?如何选择适合你的平台?
- 2025-01-08CCPM如何缩短项目周期并降低风险?
- 2025-01-08Omnivore 替代品 Readeck 安装与使用教程
- 2025-01-07Cursor 收费太贵?3分钟教你接入超低价 DeepSeek-V3,代码质量逼近 Claude 3.5
- 2025-01-06PingCAP 连续两年入选 Gartner 云数据库管理系统魔力象限“荣誉提及”
- 2025-01-05Easysearch 可搜索快照功能,看这篇就够了
- 2025-01-04BOT+EPC模式在基础设施项目中的应用与优势
- 2025-01-03用LangChain构建会检索和搜索的智能聊天机器人指南
- 2025-01-03图像文字理解,OCR、大模型还是多模态模型?PalliGema2在QLoRA技术上的微调与应用