2010-04-22 121 views
1

假设我在一个类中有几个对象,每个对象都需要用不同的值构造。我可以写这样的事:构造函数初始化一个子对象数组?

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) 
    { 
    } 
}; 

回答

2

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

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

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

相关问题