C++创建派生类对象时,会调用两个默认构造函数?

2024年12月01日 12:47
有1个网友回答
网友(1):

1.
派生类构造函数中的某些初始化可能是基于基类的,所以规定构造在类层次的最根处开始,而在每一层,首先调用基类构造函数,然后调用成员对象构造函数。因为c++的成员变量是不会自动初始化的。
2.
如果没有显式调用基类的构造函数,会自动调用基类的无参构造函数。而如果基类只有带参数的构造函数,则会报错。不一定要显式的无参构造函数,可以显式调用基类带参数的构造函数。
#include
using namespace std;
class base{
public:
base(int c){cout<< "基类带参构造函数" << c << endl;}
~base(){cout<<"基类析构" << endl;}
};
class derived:public base{
public:
derived(int c):base(c) // 显式调用基类构造函数
{

cout<< "派生类带参构造函数" << c << endl;
}
~derived(){cout<<"派生类析构" << endl;}
};
int main()
{
int i = 9;
derived d1(i);
return 0;
}输出结果:
基类带参构造函数9
派生类带参构造函数9
派生类析构
基类析构