我是新的C++,我需要一些澄清的構造和這裏我的問題是:爲什麼在創建類對象數組時無法調用參數化構造函數?
- 我們可以用一個參數的構造函數在創建類對象的數組?
- 或者只有在創建類對象數組時纔可以使用默認構造函數?
請解釋它是如何完成的,或者爲什麼它不能完成。我需要對此有更深入的瞭解。
我是新的C++,我需要一些澄清的構造和這裏我的問題是:爲什麼在創建類對象數組時無法調用參數化構造函數?
請解釋它是如何完成的,或者爲什麼它不能完成。我需要對此有更深入的瞭解。
您可以使用參數化構造函數來初始化數組。看下面的例子。
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;
}
陣列things
是Foo
對象。我正在使用統一初始化來構建陣列中的3個Foo
對象。這些依賴於我在類中定義的參數化構造函數。
是的,這是可能的,儘管在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} };
第一個和第二個語法需要複製構造函數,所以確保對象是可複製的,並且複製構造函數是正確實現的。 – user3528438 2015-02-11 14:05:37
比方說,我們有這個類:
class Foo
{
public:
Foo(int i, const std::string& s);
// ...
};
然後
是:
std::vector<Foo> myFooVector(5, Foo(1, "bar"));
上面創建了一個五vectorFoo
對象,每個都具有參數1
和"bar"
發送到th e參數化構造函數。
您也可以使用像
std::array<Foo, 2> myFooArray = {
{ 1, "bar" },
{ 2, "quug" }
};
上面創建包含兩個Foo
對象的array,每個使用參數化的構造構成。
如果您沒有明確調用任何構造函數,那麼將使用默認的構造函數。從上面使用例子:
std::vector<Foo> myFooVector(5);
這將創建包含五個默認構造Foo
對象的矢量。
而且
std::array<Foo, 2> myFooArray;
這就造成了兩個默認構造Foo
對象的數組。
真的很感謝你的解釋@Cyber – Nagarajan 2015-02-11 13:53:11
同樣可以創建多維數組對象嗎? – Nagarajan 2015-02-11 18:02:17
@Nagarajan是的,你將只有一個嵌套級別的{}' – CoryKramer 2015-02-11 18:02:59