我是C ++的新手,我需要对构造函数做一些澄清,我的问题是:
请解释如何完成,或者为什么不能。我需要对此有更深入的了解。
答案 0 :(得分: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;
}
数组things
属于Foo
个对象。我正在使用统一初始化来构造数组中的3个Foo
对象。这些依赖于我在类中定义的参数化构造函数。
答案 1 :(得分: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 :(得分:2)
让我们说我们有这个课程:
class Foo
{
public:
Foo(int i, const std::string& s);
// ...
};
然后
是:
std::vector<Foo> myFooVector(5, Foo(1, "bar"));
上面创建了vector个五个Foo
个对象,每个对象都有参数1
和"bar"
发送给参数化构造函数。
你也可以使用像例如
这样的数组std::array<Foo, 2> myFooArray = {
{ 1, "bar" },
{ 2, "quug" }
};
上面创建了一个array,其中包含两个Foo
个对象,每个对象都是使用参数化构造函数构建的。
如果未显式调用任何构造函数,则将使用默认构造函数。使用上面的例子:
std::vector<Foo> myFooVector(5);
这会创建一个包含五个默认构造的Foo
对象的向量。
和
std::array<Foo, 2> myFooArray;
这会创建一个包含两个默认构造的Foo
对象的数组。