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

C++ 操作符重載完全指南

     編輯:C++ 入門

什麼是操作符重載

賦予自定義類型使用內置運算符(+ - * / == << 等)的能力,實現語法糖。本質是函數重載,函數名為 operator@。

兩種實現方式

  1. 成員函數:左操作數隱含為 *this,參數少一個。
    Point operator+(const Point& rhs) const;
  2. 友元函數:兩個操作數均為顯式參數,需訪問私有成員時聲明 friend。
    friend int operator*(const Point&, const Point&);

示例:二維向量

class Point {
    int x, y;
public:
    Point(int _x, int _y): x(_x), y(_y) {}
    // 成員函數:向量加
    Point operator+(const Point& p) const {
        return Point(x + p.x, y + p.y);
    }
    // 友元函數:內積
    friend int operator*(const Point& a, const Point& b) {
        return a.x*b.x + a.y*b.y;
    }
};
// 使用
Point p1(1,3), p2(2,6);
Point p3 = p1 + p2; // (3,9)
int dot = p1 * p2;  // 20

重載規則與限制

  • 至少一個操作數為用戶定義類型。
  • 不能改變運算符優先級、結合性、操作數個數。
  • 不能重載:. .* :: sizeof ?: typeid。
  • 不應重載邏輯與 && ||、逗號 ,、取址 &(除非極特殊需求),因會失去短路求值/內置語義。
  • 賦值 =、下標 []、調用 ()、箭頭 -> **必須**作為成員函數重載。

前置/後置 ++ -- 重載

  • 前置:T& operator++() 無參數,返回引用。
  • 後置:T operator++(int) 佔位參數 int,返回舊值副本。
class Array {
    int* a; int pos, n;
public:
    int& operator++() { return a[++pos]; }     // ++a
    int operator++(int) { return a[pos++]; }   // a++
};

最佳實踐

  1. 保持語義直觀:+ 應無副作用,+= 修改左值。
  2. 返回類型:算術運算符返回值,賦值/複合賦值返回引用。
  3. 對稱性:若重載 == 應重載 !=;< 配 > 等。
  4. 流運算符 << >> 必須為友元(左操作數是流)。

總結

操作符重載是 C++ 表達力的核心。正確使用能讓自定義類型像內置類型一樣自然運算。關鍵在於選擇成員/友元、保持語義一致、避免濫用邏輯運算符。

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