3

これは、C++ チュートリアルの 1 つから抜粋したものです。

// vectors: overloading operators example
#include <iostream>
using namespace std;

class CVector {
  public:
    int x,y;
    CVector () {};
    CVector (int,int);
    CVector operator + (CVector);
};

CVector::CVector (int a, int b) {
  x = a;
  y = b;
}

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

int main () {
  CVector a (3,1);
  CVector b (1,2);
  CVector c;
  c = a + b;
  cout << c.x << "," << c.y;
  return 0;
}

演算子のオーバーロード関数では、ローカル変数を作成してtempから返します。かなり混乱しています。これは正しい方法ですか?

4

2 に答える 2

5

「これは正しい方法ですか?」

はい、そうです。これはローカル変数ではなく、実際に返されるローカル変数のコピーであることに注意してください。これは完全に有効であり、正しいことです。値で返すときではなく、ポインターまたは参照で返すときにローカル変数を返すことに注意してください。

于 2013-11-09T22:05:44.990 に答える
1

はい、値によって返されるためです。関数に次のような署名があったとしたら、それは正しくありません。

CVector& CVector::operator+(CVector param);

ちなみに、より効率的な実装は次のようになります。

CVector CVector::operator+(const CVector &param) const;
于 2013-11-09T22:06:33.553 に答える