最后修改时间2022/3/9
一.默认构造函数
我们知道,当我们创建某个类的对象时,编译器将自动调用构造函数。如果我们在类的定义中没有声明定义构造函数,则将调用一个编译器自动创建的不带参数的默认构造函数。
//默认构造函数
//default construction
ClassName::ClassName()
{
}
相反,如果我们定义了构造函数,则编译器将不会自动创建默认构造函数。若这时恰好我们自定义的构造函数,是有参数且不带缺省值(默认值)的。那么,当我们调用一个无参的构造函数时,编译器就会报错。
Error:"no matching function for call to 'ClassName::ClassName()'",
//不存在默认构造函数
所以我们可以在编写类时,定义两个构造函数,其中一个是不带参数的默认构造函数,或者只定义一个有缺省值的构造函数,就可以很好避免这种错误。
二.某些情况下调用(拷贝)构造函数
在一些“隐秘”的情况下,编译器也是会调用构造函数的。例如,我们定义了一个存放字符串的类String,其类定义如下
class String
{
private:
char * str;
int len;
static int num