我是新的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