【问题标题】:Initializing an Array of Objects using a Constructor that takes in Arguments for creating the Object使用构造函数初始化对象数组,该构造函数接受用于创建对象的参数
【发布时间】:2013-10-30 05:08:21
【问题描述】:

我有一个由 n 粒子组成的系统。一个粒子对象可以通过使用一个构造函数来初始化,该构造函数接受几个参数(比如双精度数)作为参数。

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

我现在有一个需要 n 粒子数组的系统。我想构建一个构造函数,它接收对象数量以及粒子参数并创建一个 n-Particle 数组。

我尝试了以下方法:

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 隐藏了同名的属性 p。请改用p = new Particle[n] 之类的东西。
  • 具体注释一下//大小为n的粒子数组并不代表两者P[n]的意思是一样的
  • 这是有错误的确切代码吗:错误说不匹配 'p[i] = tempp' 中的 'operator=' 并且您的代码说 p[i] = temp;
  • 您代码中的语法完全无效,编译(和运行时)错误将比您显示的更多。

标签: c++ arrays class oop constructor


【解决方案1】:

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

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

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

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

【讨论】:

  • 为什么我们会得到错误 no known conversion from ‘Particle(double, double, double, double)’ to ‘const Particle&’?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-05
  • 2021-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-12
相关资源
最近更新 更多