缺省构造函数是指不需要用户指定实参就可以被调用的构造函数,这并不意味着它不能接受实参。只是意味着构造函数的每个参数都有一个缺省值与之关联。例如,下面的每个函数都表示一个缺省构造函数:
//每个都是缺省构造函数
Account::Account() { ... }
iStack::iStack(int size=0){ ... } //存在一个参数,该参数有缺省值
Complex::complex(double re=0.0,double im=0.0){ ... }//存在两个参数,两个参数有缺省值
很多的人常常会错误的认为,如果不存在缺省构造函数,则编译器会自动生成一个缺省构造函数,并将其应用在对象上,以初始化类的数据成员。但这不是绝对的。例如:
class Account
{
public:
double *_name ;
double _amount ;
double _owner ;
};
对于我们定义的Account类来说,这就不是真的:系统既没有生成缺省构造函数也没有调用它。对于含有类数据成员或继承来的比较复杂的类,这在部分上是对的:可能会生成一个缺省构造函数,但是它不会为内置或复合型的数据成员(指针或数组)提供初值。
下面的这些都是不真实的:
1、一个类必须至少提供一个构造函数
这是不真实的,一个类不一定要提供构造函数。如果该类含有数据成员,才需要提供一个或多个构造函数。
2、缺省构造函数是参数表中没有参数的构造函数
这是不真实的,缺省构造函数是指不需要用户指定实参就可以被调用的构造函数,而不是指参数表没有参数的,如果参数表有参数,但是其有缺省值,这个构造函数也是缺省构造函数。
3、如果一个类不显示地提供缺省构造函数,则编译器会自动生成一个,用相关类型的缺省值初始化每个数据成员。
这是不真实的。通常编译器并不会自动生成一个构造函数,即使生成了构造函数,也不一定会初始化成员变量。