构造函数初始化一个子对象数组?

时间:2010-04-22 15:18:06

标签: c++ constructor

假设我在一个类中有几个对象,每个对象都需要使用不同的值进行构造。我可以这样写:

class b
{
public:
  b(int num)
    {
    // 1 for a.b1, and 2 for a.b2
    }
};

class a
{
public:
  b b1;
  b b2;
  a() : b1(1), b2(2)
    {
    }
};

但是,如果这些多个对象存储在数组中,是否可以做同样的事情?

我第一次尝试它不会编译:

class a
{
public:
  b bb[2];
  a() : bb[0](1), bb[1](2)
    {
    }
};

1 个答案:

答案 0 :(得分:2)

你不能直接这样做;您需要初始化构造函数体中的数组元素。

在输入构造函数的主体之前,默认构造数组的元素。由于您的示例类b不是默认可构造的(即,它没有可以使用零参数调用的构造函数),因此您不能将b数组作为成员变量。

当你可以explicitly initialize the array时,你可以拥有一个在其他情境中不是默认构造类型的数组。