当父类构造函数有参数时,需要在子类的初始化列表中显式调用
先构造父类,再构造成员变量(组合),最后构造自己
先析构自己,再析构成员变量(组合),最后析构父类
/*
当父类构造函数有参数时,需要在子类的初始化列表中显式调用
先构造父类,再构造成员变量(组合),最后构造自己
先析构自己,再析构成员变量(组合),最后析构父类
*/
#include <iostream>
using namespace std;
class Object
{
public:
Object()
{
cout << "Object()默认构造函数 " << endl;
}
Object(const char* s)//没有默认构造函数
{
cout << "Object()构造函数 " << s << endl;
}
~Object()
{
cout << "~Object()析构函数" << endl;
}
private:
};
class Parent :public Object
{
public:
Parent(const char* s) : Object(s)//此时父类没有默认构造函数,需要加上初始化列表
{
cout<<"Parent()构造函数" << s << endl;
}
~Parent()
{
cout<<"~Parent()析构函数" << endl;
}
private:
};
class Child :public Parent
{
public:
Child() :o2("o2"),o1("o1"),Parent("Parameter from Child!")
{
cout << "Child()构造函数" << endl;
}
~Child()
{
cout << "~Child()析构函数" << endl;
}
private:
Object o1;//组合
Object o2;
};
void run()
{
Child child;
}
int main()
{
run();
return 0;
}
Object()构造函数 Parameter from Child!
Parent()构造函数 Parameter from Child!
Object()构造函数 o1
Object()构造函数 o2
Child()构造函数
~Child()析构函数
~Object()析构函数
~Object()析构函数
~Parent()析构函数
~Object()析构函数