默认构造函数(default constructor)就是在没有显式提供初始化式时调用的构造函数。它由不带参数的构造函数,或者为所有的形参提供默认实参的构造函数定义。如果定义某个类的变量时没有提供初始化时就会使用默认构造函数。
C++
#include <iostream>
using namespace std;
class A
{
public:
A(){ // 类的默认构造函数
var = 10;
c = 'q';
}
A(int val = 10)
int var;
char c;
};
int main()
{
A ex;
cout << ex.c << endl << ex.var << endl;
return 0;
}
/*
运行结果:
q
10
*/
说明:上述程序中定义变量 ex 时,未提供任何实参,程序运行时会调用默认的构造函数。
C++
#include <iostream>
using namespace std;
class A
{
public:
A(int _var = 10, char _c = 'q'){ // 类的默认构造函数
var = _var;
c = _c;
}
int var;
char c;
};
int main()
{
A ex;
cout << ex.c << endl << ex.var << endl;
return 0;
}
/*
运行结果:
q
10
*/
说明:上述程序中定义变量 ex 时,未提供任何实参,程序运行时会调用所有形参提供默认值的构造函数。
如果用户定义的类中没有显式的定义任何构造函数,编译器就会自动为该类型生成默认构造函数,称为合成的默认构造函数。
C++
#include <iostream>
using namespace std;
class A
{
public:
int var;
char c;
};
int main()
{
A ex;
cout << ex.c << endl << ex.var << endl;
return 0;
}
/*
运行结果:
0
*/
此时编译器会自动为 A 分配一个默认的构造函数,在上述示例中,类 A 中的变量 c 默认赋值为 \0,var 默认赋值为 0。
一般情况下,如果类中包含内置或复合类型的成员,则该类就不应该依赖于合成的默认构造函数,它应该定义自己的构造函数来初始化这些成员。多数情况下,编译器为类生成一个公有的默认构造函数,只有下面两种情况例外:
阅读量:2020
点赞量:0
收藏量:0