#include<iostream>
using namespace std;
class Base{
public:
Base(){cout<<'A';}
Base(int c){cout<<c;}
~Base(){cout<<"基类析构";}
};
class Derived:public Base{
public:
Derived(){cout<<'B';}
Derived(int c){cout<<c;}
~Derived(){cout<<"派生类析构";}
};
int main()
{
int i = 9;
Derived d1(i);
return 0;
}
为什么先调用基类的默认构造函数,而不是自定义的构造函数?
删掉基类的默认构造函数后,编译出错,说没有默认构造函数,那在有自定义构造函数的情况下。一定需要显式的默认构造函数吗?
运行结果是
A9派生类析构基类析构
派生类构造函数中的某些初始化可能是基于基类的,所以规定构造在类层次的最根处开始,而在每一层,首先调用基类构造函数,然后调用成员对象构造函数。因为C++的成员变量是不会自动初始化的。
如果没有显式调用基类的构造函数,会自动调用基类的无参构造函数。而如果基类只有带参数的构造函数,则会报错。不一定要显式的无参构造函数,可以显式调用基类带参数的构造函数。
输出结果:
基类带参构造函数9
派生类带参构造函数9
派生类析构
基类析构