没有默认构造函数的类

时间:2013-11-22 06:25:51

标签: c++ constructor

我们可以创建一个没有默认构造函数的类对象数组,如果是,那么任何人都可以详细说明我们该如何做到这一点?

对于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
}

2 个答案:

答案 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)

问题是,如果定义任何类型的构造函数,编译器将不会自动生成默认构造函数。你必须手动完成。