派生类构造函数的执行顺序

派生类构造函数的执行顺序

派生类构造函数的执行顺序

下面给出一个例子

代码:

1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 
 6 //打印函数名辅助宏
 7 #define PRINT_FUNC_NAME()
 8     cout << __FUNCTION__ << endl;
 9 
10 
11 //构造及析构函数声明与实现辅助宏
12 #define DE_AND_CONSTRUCTOR( className )
13 public:
14     className(int a)
15     :m_a(a)
16     {
17         PRINT_FUNC_NAME()
18     }
19     virtual ~className()
20     {
21         PRINT_FUNC_NAME()
22     }
23 private:
24     int m_a;
25 
26 
27 class Base1
28 {
29     DE_AND_CONSTRUCTOR(Base1)
30 };
31 
32 class Base2
33 {
34     DE_AND_CONSTRUCTOR(Base2)
35 };
36 
37 class Base3
38 {
39     DE_AND_CONSTRUCTOR(Base3)
40 };
41 
42 class Member1
43 {
44     DE_AND_CONSTRUCTOR(Member1)
45 };
46 
47 class Member2
48 {
49     DE_AND_CONSTRUCTOR(Member2)
50 };
51 
52 
53 
54 class Derived: public Base1, public Base2, public Base3
55 {
56 public:
57     Derived()//注意此处的顺序与执行的顺序无关
58         :Base3(0), m_Member1(0), Base1(0), Base2(0),m_Member2(0)
59     {
60         PRINT_FUNC_NAME()
61     }
62     virtual ~Derived()
63     {
64         PRINT_FUNC_NAME()
65     }
66 
67 private:
68     Member1 m_Member1;
69     Member2 m_Member2;
70 };
71 
72 
73 
74 int main()
75 {
76     Derived mDerived;
77 
78     return 0;
79 }

运行结果:

派生类构造函数的执行顺序

参考:C++语言程序设计(4)清华大学 郑莉 【第七章7.4派生类的构造和析构函数】
原文链接: https://www.cnblogs.com/shanql/p/5429066.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/232502

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 下午3:30
下一篇 2023年2月13日 下午3:31

相关推荐