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

时间:2013-10-21 15:48:29

标签: c++ arrays class oop constructor

我有一个由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的新手。任何有关如何克服这一点的帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

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

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

这样做的目的是为了定义对象的赋值如何根据其类来工作。在这里,您可以执行属性赋值或指定您定义的粒子的语义。当您在对象中动态分配数据时,如果指针的复制可能不是正确的行为,则此功能特别有用。

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