2015-02-11 168 views

回答

6

您可以使用参数化构造函数来初始化数组。看下面的例子。

class Foo 
{ 
public: 
    Foo(int _a, bool _b) : a{_a}, b{_b} {} 
private: 
    int a; 
    bool b; 
}; 

int main() { 
    Foo things[] = {{5, true}, 
        {3, false}, 
        {7, true}}; 
    return 0; 
} 

阵列thingsFoo对象。我正在使用统一初始化来构建阵列中的3个Foo对象。这些依赖于我在类中定义的参数化构造函数。

+0

真的很感谢你的解释@Cyber​​ – Nagarajan 2015-02-11 13:53:11

+0

同样可以创建多维数组对象吗? – Nagarajan 2015-02-11 18:02:17

+1

@Nagarajan是的,你将只有一个嵌套级别的{}' – CoryKramer 2015-02-11 18:02:59

4

是的,这是可能的,尽管在C++ 03中有一些限制。这是有效的:

A a[3] = { x, y, z }; 

但是调用构造函数把多个参数,你需要做的是这样的:

A a[3] = { A(x1, x2, x3), A(y1, y2, y3), A(z1, z2, z3) }; 

在C++ 11更容易多亏了新的统一初始化语法:

A a[3] = { {x1, x2, x3}, {y1, y2, y3}, {z1, z2, z3} }; 
+2

第一个和第二个语法需要复制构造函数,所以确保对象是可复制的,并且复制构造函数是正确实现的。 – user3528438 2015-02-11 14:05:37

2

比方说,我们有这个类:

class Foo 
{ 
public: 
    Foo(int i, const std::string& s); 
    // ... 
}; 

然后

  1. 是:

    std::vector<Foo> myFooVector(5, Foo(1, "bar")); 
    

    上面创建了一个五vectorFoo对象,每个都具有参数1"bar"发送到th e参数化构造函数。

    您也可以使用像

    std::array<Foo, 2> myFooArray = { 
        { 1, "bar" }, 
        { 2, "quug" } 
    }; 
    

    上面创建包含两个Foo对象的array,每个使用参数化的构造构成。

  2. 如果您没有明确调用任何构造函数,那么将使用默认的构造函数。从上面使用例子:

    std::vector<Foo> myFooVector(5); 
    

    这将创建包含五个默认构造Foo对象的矢量。

    而且

    std::array<Foo, 2> myFooArray; 
    

    这就造成了两个默认构造Foo对象的数组。

+1

额外的布朗尼点,如果你提到'Foo'有一个移动构造函数的好处。 – Bathsheba 2015-02-11 13:49:41

+0

谢谢你的解释@Joachim – Nagarajan 2015-02-11 13:53:51

相关问题