我想知道如何使用一些参数初始化动态分配的数组中的每个对象。
我知道如何使用默认构造函数初始化动态分配的数组中的所有对象。
例如,假设有一个名为Circle的类,它有一个名为radius的成员变量。 我知道
Circle *arr=new Circle[5]
表示一个Circle对象是由默认构造函数构造的。
但是我该如何做一些工作? (尽管这不起作用。)
Circle *arr=new Circle[5](10)
以下是您可以参考的整个代码。
#include <iostream>
using namespace std;
class Circle
{
private:
int radius;
public:
Circle(int r)
{
cout << "radius : " << r << endl;
this->radius = r;
}
Circle()
{
cout << "radius : 0" << endl;
this->radius = 0;
}
~Circle()
{
cout << "deleted" << endl;
}
};
int main()
{
Circle *arr = new Circle[5];
// Here, What I want is something like this
// Circle *arr = new Circle[5](10) //10 would be an argument meaning radius
delete[] arr;
system("pause");
}
答案 0 :(得分:3)
您可以使用std :: vector。
如果您仍然想使用数组,可以使用
Circle *arr = new Circle[5]{10};
会将第一个半径初始化为10,其他默认值使用默认值。
示例输出将是:
radius : 10
radius : 0
radius : 0
radius : 0
radius : 0
deleted
deleted
deleted
deleted
deleted
如果您要使用单行解决方案,则可以使用以下脏行:
Circle *arr = new Circle[5]{10,10,10,10,10};
答案 1 :(得分:3)
我解决了这个问题。
我想知道是否可以通过使用数组来实现这些工作。
但是我发现我可以使用std :: vector
vector<Circle> arr(num,Circle(radius))
然后,构造函数Circle(int r)
仅被调用一次
复制构造函数Circle(Circle& c)
被调用多次。
谢谢!