web-dev-qa-db-ja.com

C ++で単項マイナス演算子をオーバーロードする方法は?

私はベクタークラスを実装していますが、ベクターの反対を取得する必要があります。演算子のオーバーロードを使用してこのメ​​ソッドを定義することは可能ですか?

ここに私が意味するものがあります:

Vector2f vector1 = -vector2;

このオペレーターが達成したいことは次のとおりです。

Vector2f& oppositeVector(const Vector2f &_vector)
{
 x = -_vector.getX();
 y = -_vector.getY();

 return *this;
}

ありがとう。

68

はい。ただし、パラメーターを指定しません。

class Vector {
   ...
   Vector operator-()  {
     // your code here
   }
};

* thisを返すべきではないことに注意してください。単項演算子は、適用されるものを変更するのではなく、新しいVector値を作成する必要があるため、コードは次のようになります。

class Vector {
   ...
   Vector operator-() const {
      Vector v;
      v.x = -x;
      v.y = -y;
      return v;
   }
};
117
anon

それは

Vector2f operator-(const Vector2f& in) {
   return Vector2f(-in.x,-in.y);
}

クラス内または外部に配置できます。私のサンプルは名前空間の範囲内です。

27