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文で返却しています。
コメント