C++ 二項演算子のオーバーロード

C++の二項演算子のオーバーロードの宣言、定義の仕方が混乱したので整理しました。二項演算子というのは、a = b + c+のような演算子のことです。
考え方としては、

新しいオブジェクト=自オブジェクト+別のオブジェクト

です。
自オブジェクトはthisポインタで表現されるので省略されて、その宣言、定義は、

class MyClass {
public:
 MyClass operator+(const MyClass& obj) const
 {
  int result = this->value + obj.value;
  return MyClass(result);  // 必ず新しいオブジェクトの生成を伴う
 }
private:
 int value;
};

となります。
引数のオブジェクトは更新されないのでconst修飾子を伴い、また、自オブジェクトも更新されないのでconstメンバ関数となります。
※ 実は=演算子(代入演算子)もオーバーロードされた演算子です。+演算子はこれの右辺にあたる項をreturn文で返却しています。

コメント

コメントする

CAPTCHA