假设我们的C ++项目中有类TestClass
。默认构造函数是一个空参数列表。所以我们有:
TestClass();
TestClass(int defaultParam = 0);
这两个可以被视为默认构造函数吗?如果它们可以,那么拥有像第二行这样的默认构造函数是否合乎道德?
答案 0 :(得分:2)
中的任何一个
TestClass(void);
TestClass(int defaultParam=0);
可以用作默认构造函数。当你有两者时,这是一个问题,因为当编译器需要使用默认构造函数时,编译器无法区分这两者。 E.g。
TestClass anObject;
TestClass objectArray[5];
与您的问题无关
出于文体方面的原因,您应该使用:
TestClass();
而不是
TestClass(void);
第二种形式是C ++支持的,但没有必要。只有在C语句中声明函数时才需要参数类型void
。
答案 1 :(得分:0)
有多个构造函数被称为构造函数重载。如果有两个默认构造函数,它将生成错误,因为编译器在创建对象时不知道要调用哪个构造函数。如果你没有声明一个默认的构造函数,那么编译器会单独完成它。