BZ易风

导航

 

调用原则:

  • 子类对象在创建时会首先调用父类的构造函数
  • 父类构造函数执行完毕后,才会调用子类的构造函数
  • 当父类构造函数有参数时,需要在子类初始化列表(参数列表)中显示调用父类构造函数
  • 析构函数调用顺序和构造函数相反

 

 

1.顺序

1.1          子类创建对象时,先调用父类的构造,然后调用自身构造

1.2          析构顺序与构造顺序相反

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;

class Base
{
public:
    Base()
    {
        cout << "Base默认构造函数调用" << endl;
    }

    ~Base()
    {
        cout << "Base析构" << endl;
    }
};

class Son : public Base
{
public:
    Son()
    {
        cout << "Son默认构造函数" << endl;
    }
    ~Son()
    {
        cout << "Son析构" << endl;
    }
};
void test01()
{
    Son s;
}

int main()
{
    test01();  //父构->子构->子析->父析
    system("Pause");
    return 0;
}

结果:

2.子类是不会继承父类的构造函数和析构函数

父类没有默认构造函数,子类也不能有

补充内容,如果父类中没有合适默认构造,那么子类可以利用初始化列表的方式显示的调用父类的其他构造

class Base2
{
public:
    Base2(int a)
    {
        this->m_A = a;
        cout << "Base2有参构造" << endl;
    }
    int m_A;
};
class Son2 : public Base2
{
public:
    //Son2(){} // 因为父类中没有默认构造函数了 所以会报错
    Son2(int a) : Base2(a) //利用初始化列表的方式 显示调用 传值给父类有参构造
    {

    }
};

void test02()
{
    Son2 s2(10);
    cout << s2.m_A << endl;
}

结果:

 

posted on 2021-08-23 16:32  BZ易风  阅读(90)  评论(0编辑  收藏  举报