C++中用賦值形式op=取代單獨形式op

來源:互聯網
上載者:User

大多數程式員認為如果他們能這樣寫代碼:

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)。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.