zoukankan      html  css  js  c++  java
  • C++多重继承的构造执行顺序

    一个类,它可能有基类,也可能存在多个基类,这些类里面还可能是虚拟基类,并且在类的本身也可能存在对象成员。那么所涉及的这些类或对象成员会以什么样的顺序来调用它们各自的构造函数呢?今天我们就来举例分析下。

    执行以下程序:

    #include <iostream>
    
    using namespace std;
    
    class Base{
    public:
        Base(){
            cout << "The constructor of Base" << endl;
        }
    };
    
    class VBase{
    public:
    	VBase(){
    		cout << "The constructor of VBase" << endl;
    	}
    };
    
    class VBase_{
    public:
    	VBase_(){
    		cout << "The constructor of VBase_" << endl;
    	}
    };
    
    /* 普通继承与虚继承 */
    class A : public Base, virtual public VBase_, virtual public VBase{
    public:
    	A(){
    		cout << "The constructor of A" << endl;
    	}
    };
    
    class B{
    public:
    	B(){
    		cout << "The constructor of B" << endl;
    	}
    };
    
    class D{
    public:
    	D(){
    		cout << "The constructor of D" << endl;
    	}
    };
    
    class C : public B, public A{
    public:
    	C(){
    		cout << "The constructor of C" << endl;
    	}
    
    private:
        /* 对象成员 */
    	D obj;
    };
    
    int main()
    {
        /* 实例化类 C */
    	C test = C();
    
    	return 0;
    }
    

    运行结果:

    结论

    C++多重继承的构造执行顺序:

    1.首先执行虚基类的构造函数,多个虚基类的构造函数按照被继承的顺序构造;
    2.执行基类的构造函数,多个基类的构造函数按照被继承的顺序构造;
    3.执行成员对象的构造函数,多个成员对象的构造函数按照声明的顺序构造;
    4.执行派生类自己的构造函数;
    5.析构以与构造相反的顺序执行;
    
  • 相关阅读:
    CentOS安装系统时硬盘分区建议
    Linux下的gpt分区
    如何解决Win10账户没有了管理员权限
    redis数据的清空以及回滚
    禅道的作用以及安装
    Java数组的内存图
    Java中的内存划分
    进制
    Java数组
    Java方法的重载(Overload)
  • 原文地址:https://www.cnblogs.com/GyForever1004/p/8439397.html
Copyright © 2011-2022 走看看