派生类构造函数的执行顺序
下面给出一个例子
代码:
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
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!