使用构造函数初始化对象数组,该构造函数接受用于创建对象的参数

Initializing an Array of Objects using a Constructor that takes in Arguments for creating the Object

本文关键字:构造函数 用于 创建对象 参数 初始化 对象 数组      更新时间:2023-10-16

我有一个由n粒子组成的系统。可以使用构造函数初始化 Particle 对象,该构造函数将多个参数(例如双精度值)作为参数。

Particle p(para1, para2 ... , paraN);

我现在有一个需要n粒子数组的系统。我想构建一个构造函数,该构造函数将对象数量与粒子参数一起纳入并创建一个 n 粒子数组。

我尝试了以下方法:

class System {
public:
    Particle p[]; //declare dynamic array
    System() {}
    //Constructor
    System(int n, para1, para2 ... , paraN)
    {
        Particle p[n]; //Particle array of size n
        for(int i=0; i<n; i++)
        {
                Particle temp(para1, para2 ... , paraN);
                p[i] = temp;
            }
        }
};

程序无法编译并给出以下错误:

error: no match for ‘operator=’ in ‘p[i] = tempp’
note: candidate is:
note: Particle& Particle::operator=(const Particle&)
note:   no known conversion for argument 1 from ‘Particle(double, double, double,     double)’ to ‘const Particle&’

总的来说,我是C++和 OOP 的新手。任何关于如何克服这个问题的帮助将不胜感激。

当你使用 p[i] = temp 时,编译器会在 Particle 类中查找带有签名的赋值运算符的重载:

Particle& Particle::operator=(const Particle&)

这样做的目的是让您根据对象的类定义对象的赋值方式。在这里,您可以执行属性赋值或分配您定义的粒子的语义。当您在对象中动态分配数据时,这尤其有用,在这些对象中复制指针可能不是正确的行为。

看看这个页面: http://www.cplusplus.com/articles/y8hv0pDG/它不仅解释了为什么以及何时需要赋值运算符,还解释了复制构造函数。