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


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

     

    下面给出一个例子

    代码:

     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 派生类的构造和析构函数】

    作者:shanql 转载请标明出处,谢谢。
  • 相关阅读:
    人月神话阅读笔记(三)
    MongoDB设置用户名以及密码
    pdf.js使用总结#如何在网页读取并显示PDF格式文档
    Python中eval函数的作用
    寒假学习笔记(13)
    寒假学习笔记(12)
    寒假学习笔记(11)
    寒假学习笔记(10)
    寒假学习笔记(9)
    寒假学习笔记(8)
  • 原文地址:https://www.cnblogs.com/shanql/p/5429066.html
Copyright © 2020-2023  润新知