演算子オーバーロード? 演算子オーバーライド?
会社でこれって間違いやすいよね、
結局どっちなの? みたいな感じで訊かれたりしたので、
実例を交えてエントリしてみる。
例として演算子+=を持ち出す。
class Foo { public: Foo(int value) : value_(value) { } Foo& operator +=(const Foo& f) { value_ += f.value_; return *this; } int getValue() const { return value_; } private: int value_; };
というクラスがある。
+=演算子を定義してある。
Foo f(100); f += Foo(1); f.operator+=(Foo(2)); cout << f.getValue() << endl;
結果は103になる。
このように+=の実体はoperator+=(arg)に過ぎないということを忘れてはいけない。
本当の意味で+=などの演算子をオーバーライドすることはできない。
よって、クラスに対する+=などの演算子は常にオーバーロードになる。
int i = 100; i += 1; i.operator+=(2);
また、このような書き方は赦されない。