[C++]默认构造函数

时间:2022-05-15 18:53:50

默认构造函数(default constructor)就是在没有显示提供初始化式时调用的构造函数。它由不带参数的构造函数,或者为所有的形参提供默认实参的构造函数定义。若个定义某个类的变量时没有提供初始化式就会使用默认构造函数。

如果用户定义的类中没有显式的定义任何构造函数,编译器就会自动为该类型生成默认构造函数,称为合成的构造函数。

多数情况下,编译器为类生成一个公有的默认构造函数,例如:

1.我们知道,若某类/函数中有成员是类对象(a),那么它会自动调用A的默认构造函数;

 class A
{
}; class B
{
public:
A a;
};

2.类中存在虚函数,或者基类是虚基类,那么编译器会自动调用构造函数来初始化虚函数表或者虚基类表。

3. ...

但是以下情况例外:

1.一个类显式的声明了任何构造函数或者是非公有的默认构造函数,编译器不生成公有的默认构造函数。

 class A
{
private:
int num;
public:
A(int n)
{
num=n;
}
}; int main()
{
A a;//error C2512: “A”: 没有合适的默认构造函数可用
return ;
}

**2.派生类默认调用基类构造函数来完成基类初始化,如果基类没有提供这个默认构造函数,那么编译器不会为派生类生成默认的构造函数。

 class A
{
private:
int A_num;
public:
//A(){}; //若是没有,则下面报错;
A(int n)
{
A_num=n;
}
}; class B:public A
{
private:
int B_num;
public:
B(int n)
{ //error C2512: “A”: 没有合适的默认构造函数可用
B_num=n;
}
};

3. ...

欢迎补充,谢谢!