C ++如何在有构造函数时创建对象数组?
C++ how can I create an array of objects when there is a constructor?
如果 myClass
没有构造函数,则以下工作正常:
myClass x[5];
如果我在 myClass
中放置构造函数,此行会导致编译错误。
在定义构造函数时创建对象数组的标准做法是什么?
是否可以用一个构造函数填充整个对象数组?
If myClass does not have a constructor the following works fine:
如果您的 class 没有 用户声明的构造函数 。在这种情况下,它有一个 隐式声明的默认构造函数 ,
将使用它
myClass x[5];
构建对象。
如果您自己声明构造函数,则不会声明隐式默认构造函数。相反,您可以声明自己的。默认构造函数只是一个可以不带参数调用的构造函数:
class myClass {
public:
myClass() {
// Default constructor
}
};
或者,如果您只是希望默认构造函数的行为与隐式构造函数完全相同,您可以 default it:
class myClass {
public:
myClass() = default;
};
如果您不想这样做并使用不同的构造函数,您仍然可以使用列表初始化:
myClass x[5] = {{/*constructor arguments for first object*/},
{/*constructor arguments for second object*/},
//...
};
或者,更简单,只需使用 std::vector<myClass>
和 push_back
或 emplace_back
每个元素以及您需要的构造函数参数。
std::vector<myClass> x;
x.emplace_back(/*constructor arguments for first object*/);
x.emplace_back(/*constructor arguments for second object*/);
//...
这也可以在循环中完成,或者,如果所有对象都应该是彼此的副本:
std::vector<myClass> x(5, myClass(/*constructor arguments*/));
如果 myClass
没有构造函数,则以下工作正常:
myClass x[5];
如果我在 myClass
中放置构造函数,此行会导致编译错误。
在定义构造函数时创建对象数组的标准做法是什么?
是否可以用一个构造函数填充整个对象数组?
If myClass does not have a constructor the following works fine:
如果您的 class 没有 用户声明的构造函数 。在这种情况下,它有一个 隐式声明的默认构造函数 ,
将使用它myClass x[5];
构建对象。
如果您自己声明构造函数,则不会声明隐式默认构造函数。相反,您可以声明自己的。默认构造函数只是一个可以不带参数调用的构造函数:
class myClass {
public:
myClass() {
// Default constructor
}
};
或者,如果您只是希望默认构造函数的行为与隐式构造函数完全相同,您可以 default it:
class myClass {
public:
myClass() = default;
};
如果您不想这样做并使用不同的构造函数,您仍然可以使用列表初始化:
myClass x[5] = {{/*constructor arguments for first object*/},
{/*constructor arguments for second object*/},
//...
};
或者,更简单,只需使用 std::vector<myClass>
和 push_back
或 emplace_back
每个元素以及您需要的构造函数参数。
std::vector<myClass> x;
x.emplace_back(/*constructor arguments for first object*/);
x.emplace_back(/*constructor arguments for second object*/);
//...
这也可以在循环中完成,或者,如果所有对象都应该是彼此的副本:
std::vector<myClass> x(5, myClass(/*constructor arguments*/));