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.析构以与构造相反的顺序执行;
    
  • 相关阅读:
    Hibernate常用查询
    Hibernate多对多
    Hibernate简单检索方式(查询方式)
    Hibernate入门代码
    Hibernate一对多
    什么是Hibernate
    SpirngMVC入门第一天
    Docker一键部署Hadoop心得(二)
    Docker一键部署Hadoop心得(一)
    安装Docker的三种方式
  • 原文地址:https://www.cnblogs.com/GyForever1004/p/8439397.html
Copyright © 2011-2022 走看看