zoukankan      html  css  js  c++  java
  • c++对象初始化中各构造器的顺序

    c++中,类只是声名,而在定义这个类的对象时,如果这个类是继承的,或者这个对象里面还有其他的对象,各个构造器的执行顺序是怎么样的。

    先放结论:

      顺序:1.基类的constructor。2.initialize list(构造器圆括号加冒号)。3.其他对象的constructor。4.自己的constructor。

    证明:

    #include<iostream>
    using namespace std;
    class A{
        public:
        A(){
            cout<<"A:A()"<<endl;
        }
        A(int i)
        {
            cout<<"A:A("<<i<<")"<<endl;
        }
    };
    class B{
        public:
        B(){
            cout<<"B:B()"<<endl;
        }
    };
    class C:public A{
        public:
            A a;
            B b; 
            C(int i):a(i){
                cout<<"C::C()";
            }    
    };
    int main()
    {
        C c(10);
    } 

    构建了三个类:A,B,C, 其中C继承了A,A的对象a和B的对象b为C的一个成员函数,我们用initialize list 初始化a。同时比较三个初始化的顺序。

    结果:

    A:A()。是基类的default constructor,第一出现表明基类的初始化应该是第一。

    A:A(10)。是initialize list 的初始化,表明第二。

    B:B()。是其他类的对象。第三。

    C:C()。是自己的constructor 第四。

  • 相关阅读:
    day21作业
    作业day20
    K8S架构图
    day20 类的继承
    课上随手记
    第一篇CEPH集群的学习
    day19 类的讲解
    Eureka工作原理
    局域网、以太网(标准以太网、工业以太网和实时以太网)与无线局域网
    无线局域网,有线局域网
  • 原文地址:https://www.cnblogs.com/myguaiguai/p/10484264.html
Copyright © 2011-2022 走看看