繁体   English   中英

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

[英]How can I initialize objects in a dynamically allocated array with some arguments

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

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

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

您可以使用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};

我解决了这个问题。

我想知道是否可以通过使用数组来实现这些工作。

但是我发现我可以通过使用std :: vector来做到这一点

vector<Circle> arr(num,Circle(radius))

然后,构造函数Circle(int r) 被调用一次

复制构造函数Circle(Circle& c)多次调用。

谢谢!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM