banner
Matrix

Matrix

Abyss
email
github

Petty C++ 運算子重載

在 C++ 中使用operator關鍵字為運算符提供不同的行為。

基本概念#

  • 重載運算符允許自定義行為。
  • 重載運算符不改變運算符的固有優先級和結合性。

operator語法#

type operator symbol(params)

其中,type是返回類型,operator symbol表示要重載的運算符。例如,加法運算符和加法賦值運算符的重載形式為:

// 加法
operator+
// 加法賦值
operator+=

一個簡單的示例#

以下示例展示了如何重載加法運算符:

class MyClass {
public:
    MyClass(int val) : value(val) {}

    // 重載加法運算符
    MyClass operator+(const MyClass& other) const {
        return MyClass(value + other.value - 1);
    }

    int getValue() const {
        return value;
    }

private:
    int value;
};

不可重載的運算符#

C++ 中大多數運算符都可以重載,但由於編譯器的實現原理,以下運算符不能被重載:

  • .
  • .*
  • ::
  • ?:
  • 一些非符號運算符
    • sizeof
    • typeid
    • const_cast
    • dynamic_cast
    • static_cast

成員函數重載和全局函數重載#

  • 成員函數重載:通過類的成員函數實現,此時第一個參數是隱式的this指針。
class MyClass {
public:
    MyClass(int val) : data(val) {}

    // 成員函數重載加法運算符
    MyClass operator+(const MyClass& other) const {
        return MyClass(data + other.data);
    }

private:
    int data;
};
  • 全局函數重載:通過友元函數或普通函數實現,適用於需要對兩個不同類型的對象進行操作的情況。
class MyClass {
public:
    MyClass(int val) : data(val) {}

    // 声明友元函数以訪問私有成員
    friend MyClass operator+(const MyClass& lhs, const MyClass& rhs);

private:
    int data;
};

// 全局函數重載加法運算符
MyClass operator+(const MyClass& lhs, const MyClass& rhs) {
    return MyClass(lhs.data + rhs.data);
}
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。