继承中的构造和析构
- 子类对象在创建时会首先调用父类的构造函数
- 父类构造函数执行完毕后,才会调用子类的构造函数
- 当父类构造函数有参数时,需要在子类初始化列表(参数列表)中显示调用父类构造函数
- 析构函数调用顺序和构造函数相反
继承与组合混搭的构造和析构
子类创建对象时,先调用父类的构造,然后调用自身构造
析构顺序与构造顺序相反
子类是不会继承父类的构造函数和析构函数
补充内容,如果父类中没有合适默认构造,那么子类可以利用初始化列表的方式显示的调用父类的其他构造
main.cpp
// 40.继承方式.cpp : 定义控制台应用程序的入口点。
//
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
class Base
{
public:
Base()
{
m_A = 10;
cout << "Base默认构造函数调用" << endl;
}
~Base()
{
cout << "Base的析构函数调用" << endl;
}
int m_A;
};
// 子类会继承父类的成员属性,成员函数
//但是 子类 不会继承 父类 构造函数 和 析构函数
//只有父类自己知道如果构造和析构自己的属性,而子类不知道
class Son :public Base
{
public:
Son()
{
cout << "Son默认构造函数调用" << endl;
}
~Son()
{
cout << "Son的析构函数调用" << endl;
}
};
void test01()
{
//Base b1;
/*输出
Base默认构造函数调用
Base的析构函数调用
*/
Son s1;
/*输出
Base默认构造函数调用
Son默认构造函数调用
Son的析构函数调用
Base的析构函数调用
*/
}
class Base2
{
public:
Base2(int a)
{
this->m_A = a;
cout << "有参构造函数调用" << endl;
}
int m_A;
};
class Son2 :public Base2
{
public:
Son2(int a) : Base2(a)//利用初始化列表方式 显示调用 有参构造
{
}
};
void test02()
{
Son2 s2(1000);
/*输出
有参构造函数调用
*/
}
int main(){
test02();
system("pause");
return EXIT_SUCCESS;
}