在 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);
}