C++ | 构建子类,初始化父类(构造函数和析构函数的执行顺序)

构造函数顺序

假如有一个父类A(基类),一个的子类B,公有继承于A,当在测试文件(main函数)里,定义一个子类对象d,d对象的初始化会调用d的构造函数,但d对象的构造函数要想完成初始化必须先初始化父类的,因为子类B继承于A,A类的成员函数都被B继承过去了,所以完成初始化子类对象d必须先调用A(父类)的构造函数。

析构函数顺序

析构函数调用顺序其实和的原理类似,都是是先进后出原则,当创建子对象d时,会先执行父类构造函数,然后执行子类的构造函数。最后函数结束释放内存的时候,就会先执行子类的析构函数,然后才是父类的。

class Base1 {
public:

    Base1(){
        cout << "调用了Base的默认构造函数" << endl;
    }

    Base1(int b ,int d)  {
        cout << "调用了带两个参数的Base的构造函数" << endl;
    }

    Base1(int b)  {
        cout << "调用了带一个参数的Base的构造函数" << endl;
    }

    ~Base1() {
        cout << "调用了Base的析构函数" << endl;
    }
};

class Derived1 :public Base1{
public:

    Derived1()  {
        cout << "调用了Derived1的默认构造函数" << endl;
    }


    Derived1(int b, int d)  {
        cout << "调用了带两个参数的Derived1构造函数" << endl;
    };

    ~Derived1() {
        cout << "调用了Derived1的析构函数" << endl;

    }
};

    int main()

{

    Base1 b1;
    Base1 b2(10);
    Base1 b3(10,20);


    cout<<"==========="<<endl;

    Derived1 d1;

    Derived1 d2(1,2);


    cout<<"================="<<endl;

    return 0;
}

运行结果:
运行结果

总结:

构造子类时,先执行父类的构造函数,然后执行子类的构造函数。

析构子类时,先执行子类的析构函数,然后执行父类的析构函数。

发布了25 篇原创文章 · 获赞 17 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/Sherlock_Homles/article/details/83352660