操作员过载程序中的混淆

时间:2014-02-08 22:15:30

标签: c++ operators

在此代码中,为什么要放&在const CVector& param ???

我们可以按照以下方式使用

c = a + b;
c = a.operator+ (b);

在第二个声明中,b不是CVector&类型,所以这就是我感到困惑的原因。

// overloading operators example

#include <iostream>
using namespace std;

class CVector {
  public:
    int x,y;
    CVector () {};
    CVector (int a,int b) : x(a), y(b) {}
    CVector operator + (const CVector&);
};

CVector CVector::operator+ (const CVector& param) {
  CVector temp;
  temp.x = x + param.x;
  temp.y = y + param.y;
  return temp;
}

int main () {
  CVector foo (3,1);
  CVector bar (1,2);
  CVector result;
  result = foo + bar;
  cout << result.x << ',' << result.y << '\n';
  return 0;
}

3 个答案:

答案 0 :(得分:2)

由于您不希望操作修改操作数,因此您有两种解决方案:

  1. 发送对象的副本,以使原始文件保持不变
  2. 将其作为const引用发送:const关键字阻止您修改对象,而引用允许您在没有副本的情况下传递对象。

答案 1 :(得分:1)

因为你没有在第二个向量上运行(修改它的属性),你只是从中读取它。通过使用&amp;签名你确保它通过引用传递,如果第二个向量是一个大数据结构,如1000 * 1000矩阵,它将有效地工作。

答案 2 :(得分:0)

使用引用来避免复制object和const以指示不会修改对象。