【问题标题】:How can I initialize objects in a dynamically allocated array with some arguments如何使用一些参数初始化动态分配的数组中的对象
【发布时间】:2019-05-14 14:08:38
【问题描述】:

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

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

例如,假设有一个名为 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。
  • std::vector&lt;Circle&gt; arr(5, 10) 将完成这项工作,无需显式使用动态内存分配。
  • 谢谢。我知道向量,但只是想知道数组是否可以实现这些工作。非常感谢!!
  • 为什么不想使用默认的构造函数?默认构造函数是默认构造一个对象的构造函数,所以如果你希望默认构造的对象有一些默认值,那就是放置它们的地方
  • 我担心用户输入数据时的某些情况。

标签: c++


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我解决了这个问题。

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

    但我发现我可以通过使用 std::vector 来实现

    vector&lt;Circle&gt; arr(num,Circle(radius))

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

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

    谢谢!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多