如何使用一些参数初始化动态分配数组中的对象

时间:2019-04-16 13:28:47

标签: c++

我想知道如何使用一些参数初始化动态分配的数组中的每个对象。

我知道如何使用默认构造函数初始化动态分配的数组中的所有对象。

例如,假设有一个名为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");
}

2 个答案:

答案 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)被调用多次

谢谢!