我们可以创建一个没有默认构造函数的类对象数组,如果是,那么任何人都可以详细说明我们该如何做到这一点?
对于main()中的Abc a [10]的后续类;正在生成编译错误 '没有匹配函数来调用`Abc :: Abc()'
class Abc{
private:
int x;
public:
Abc(int a){
x = a;
}
};
int main(){
Abc a[10]; // Compilation would fail here, as it would look for default constructor
}
答案 0 :(得分:9)
我们可以创建一个没有默认构造函数的类对象数组吗?
是的,你可以。您必须调用其中一个可用的构造函数来初始化该数组的每个成员。唯一的方法是使用初始化列表初始化数组:
Abc a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
在这种情况下,将整数放入数组就足够了,因为Abc
构造函数不是显式的。这意味着你可以这样做:
Abc a = 42; // Calls A(42)
如果是明确的,你必须说
Abc a[10] = { Abc(1), Abc(2), ..... };
显然这不能很好地扩展,但它适用于小阵列。
答案 1 :(得分:3)
问题是,如果定义任何类型的构造函数,编译器将不会自动生成默认构造函数。你必须手动完成。