运算符重载程序中的混淆

Confusion in an Operator overload program

本文关键字:重载 程序 运算符      更新时间:2023-10-16

在这个代码中,为什么要把 & in 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;
}

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

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

因为你没有在第二个向量上操作(修改其属性),你只是在从中读取。通过使用&sign,您可以确保它通过引用传递,如果第二个向量是大数据结构,例如1000 * 1000矩阵,则可以有效地工作。

使用 reference 来避免复制对象,使用 const 来指示对象不会被修改。