zoukankan      html  css  js  c++  java
  • c++ 派生类的构造函数次序

    #include <iostream>
    using namespace std;
    class CFatherSum         //父类Sum
    {
    public:
        CFatherSum(int iRec){cout<<"1,Constructing CFatherSum"<<iRec<<endl;}//构造函数成员初始化
    };
    class CFatherBru        //父类Bru
    {
    public:
        CFatherBru(int iRec){cout<<"2,Constructing CFatherBru"<<iRec<<endl;}//构造函数成员初始化
    };
    class CFatherObam         //父类Obam
    {
    public:
        //第一行用于对比默认构造
        //CFatherObam(int iRec){cout<<"3,Constructing CFatherObam"<<iRec<<endl;}//构造函数成员初始化
        CFatherObam(){cout<<"3,Constructing CFatherObam*"<<endl;}//构造函数成员初始化
    };
    class CSon:public CFatherSum,public CFatherBru,public CFatherObam      //继承父Sum,Bru,Obam
    {
    public:
        CSon(int iFirst,int iSec,int iThir,int iFor):CFatherSum(iFirst),m_bru(iFor),m_sum(iThir),CFatherBru(iSec)
        {
            //CFatherObam(iFor),m_obam(iFor)        非默认构造时,须派生构造传递构造参数
        }
    
    
    
    private:
        CFatherSum m_sum;
        CFatherBru m_bru;
        CFatherObam m_obam;
    
    };
    
    //主函数
    int main()
    {
        CSon son(1,2,3,4);
    
        getchar();
        return 0;
    
    }

    结果:

    结果分析:

    构造参数次序先后如下:

                     1,派生类定义基类的顺序:从public CFatherSum到public CFatherBru到public CFatherObam  

                     2,派生类内成员在类中声明的顺序

    CFatherSum m_sum;
    CFatherBru m_bru;
    CFatherObam m_obam;

    延伸:析构函数次序相反,试验自行增加代码

          

  • 相关阅读:
    ios常用方法
    XMPP
    ios ebooks
    uinavigationcontroller swipe back
    navigationController and ToolBar
    EMC VNX5200/5400存储 新增LUN与Hosts映射操作
    H3C交换机telnet服务认证模式配置
    配置H3C交换机ftp服务
    克隆CentOS 6.9 配置静态IP,重启网络服务时报错"eth0 does not seem to be present"
    BFS解决八数码问题和狼人过河问题
  • 原文地址:https://www.cnblogs.com/liunnis/p/4463309.html
Copyright © 2011-2022 走看看