2015-02-11 49 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

相關問題