子类构造函数和父类构造函数
子类中可以定义构造函数
子类构造函数必须对继承而来的成员进行初始化
直接通过初始化列表或者赋值的方法进行初始化
调用父类构造函数进行初始化
父类构造函数在子类中的调用方式
默认调用
- 适用于无参构造函数和使用了默认参数的构造函数
显示调用
通过初始化列表进行调用
适用于所有父类构造函数
/*
测试代码
*/
#include<iostream>
using namespace std;
class Parent
{
protected:
int i;
public:
Parent()
{
cout << "Parent()" << endl;
}
Parent(int x)
{
i = x;
cout << "Parent(int x)" << endl;
}
};
class Child : public Parent
{
public:
Child() /* 隐式调用 */
{
cout << "Child()" << endl;
}
Child(int x) : Parent(x) /* 显示调用 */
{
cout << "Child(int x)" << endl;
}
};
int main()
{
Child d;
cout << endl;
Child d1(10);
return 0;
}
子类对象的构造
构造规则
子类对象在创建时会首先调用父类的构造函数
先执行父类构造函数再执行子类的构造函数
父类构造函数可以被隐式调用或者显示调用
子类构造顺序
对象创建时构造函数的调用顺序
先调用父类的构造函数
再调用成员变量的构造函数
后调用类自身的构造函数
子类析构顺序 (与构造顺序相反)
先执行自身的析构顺序
再执行成员变量的析构顺序
后执行父类的构造顺序