大多數程式員認為如果他們能這樣寫代碼:
x = x + y; x = x - y;
那他們也能這樣寫:
x += y; x -= y;
如果x和y是使用者定義的類型(user-defined type),就不能確保這樣。就C++來說,operator+、operator=和operator+=之間沒有任何關係,因此如果你想讓這三個operator同時存在並具有你所期望的關係,就必須自己實現它們。同理,operator -, *, /, 等等也一樣。
確保operator的賦值形式(assignment version)(例如operator+=)與一個operator的單獨形式(stand-alone)(例如 operator+ )之間存在正常的關係,一種好方法是後者(指operator+ 譯者注)根據前者(指operator+= 譯者注)來實現(參見條款6)。這很容易:
class Rational {
public:
...
Rational& operator+=(const Rational& rhs);
Rational& operator-=(const Rational& rhs);
};
// operator+ 根據operator+=實現;
//有關為什麼傳回值是const的解釋,
//參見Effective C++條款21 和 109頁 的有關實現的警告
const Rational operator+(const Rational& lhs,const Rational& rhs)
{
return Rational(lhs) += rhs;
}
// operator- 根據 operator -= 來實現
const Rational operator-(const Rational& lhs,const Rational& rhs)
{
return Rational(lhs) -= rhs;
}
在這個例子裡,從零開始實現operator+=和-=,而operator+ 和operator- 則是通過調用前述的函數來提供自己的功能。使用這種設計方法,只用維護operator的賦值形式就行了。而且如果假設operator賦值形式在類的public介面裡,這就不用讓operator的單獨形式成為類的友元(參見Effective C++ 條款19)。