首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

C++ 運算符重載詳解:從復數類到標準庫設計模式

     編輯:C++ 入門

什麼是運算符重載

賦予現有運算符(+, -, *, ==...)新含義,使其能操作用戶自定義類型,實現多態。編譯器根據操作數類型決議調用哪個重載版本。

基本語法

返回類型 operator運算符(參數列表) { ... }
// 成員函數形式(隱含 this)
Complex operator+(const Complex& rhs) const;
// 非成員函數形式(需 friend 或公開接口)
Complex operator+(const Complex& lhs, const Complex& rhs);

復數類完整示例

class Complex {
    double re, im;
public:
    Complex(double r=0, double i=0) : re(r), im(i) {}
    Complex operator+(const Complex& o) const { return Complex(re+o.re, im+o.im); }
    Complex operator-(const Complex& o) const { return Complex(re-o.re, im-o.im); }
    Complex& operator+=(const Complex& o) { re+=o.re; im+=o.im; return *this; }
    bool operator==(const Complex& o) const { return re==o.re && im==o.im; }
    void print() const { cout << '(' << re << ',' << im << 'i)'; }
};
// 非成員重載:支持 double + Complex
Complex operator+(double d, const Complex& c) { return Complex(d+c.re, c.im); }

重載規範與最佳實踐

運算符建議形式備註
單目 + - * & ++ --成員函數前置返回引用,後置返回值
二元算術 + - * / %非成員 friend支持隱式轉換(如 double+Complex),利用 += 實現
比較 == != < >非成員 friend對稱性
賦值 = += -=成員函數返回 *this 引用
下標 []成員函數提供 const/非 const 版本
函數調用 ()成員函數仿函數
類型轉換 operator T()成員函數慎用,隱式轉換易驚喜

標準庫設計模式

  • ostream& operator<<(ostream&, const T&):非成員 friend,鏈式輸出返回流引用。
  • istream& operator>>(istream&, T&):同理。
  • 迭代器運算符:*, ->, ++, --, +, -, [] 全部重載,模擬指針行為。
  • 智能指針:operator*, operator->, operator bool() (explicit)。

常見陷阱

  1. 返回值類型:算術運算符返回**值**(新對象),賦值/複合賦值返回**引用**。
  2. const 正確性:不修改對象的運算符標記 const;參數用 const&。
  3. 前置/後置 ++:前置 T& operator++(),後置 T operator++(int)(int 佔位符)。
  4. 不要重載 && || ,:會失去短路求值特性,改為函數名。
  5. 避免過度重載:語義不明確時用具名函數(如 add())更清晰。

運算符重載是 C++ 讓用戶定義類型「像內置類型一樣自然使用」的關鍵機制,配合模板與標準庫,構建了現代 C++ 表達力的核心基礎。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved