運算子多載
operator
關鍵詞會宣告函式,指定套用至類別實例時,運算符符號的意義。 這讓運算子有多個意義,或稱為「多載」。 編譯器會檢查運算元的類型,以區別運算子的不同意義。
語法
type
operator
operator-symbol(parameter-list)
備註
您可以用全域方式或以逐一類別為基礎,重新定義大多數內建運算子的函式。 多載運算子實做為函式。
多載運算子的名稱為 operator
x,其中 x 是運算符,如下表所示。 例如,若要多載加號運算符,您可以定義稱為 operator+ 的函式。 同樣地,若要多載加法/指派運算符, +=請定義名為 operator+=的函式。
可重新定義的運算子
運算子 | 名稱 | 類型 |
---|---|---|
, | Comma | 二進位 |
! | 邏輯 NOT | 一元 |
!= | 不等於 | 二進位 |
% | 模數 | 二進位 |
%= | 模數指派 | 二進位 |
& | 位元 AND | 二進位 |
& | 傳址 | 一元 |
&& | 邏輯 AND | 二進位 |
&= | 位元 AND 指派 | 二進位 |
( ) | 公式呼叫 | — |
( ) | 轉換運算子 | 一元 |
* |
乘法 | 二進位 |
* |
指標取值 (Dereference) | 一元 |
*= |
乘法指派 | 二進位 |
+ | 加法 | 二進位 |
+ | 一元加號 | 一元 |
++ | 遞增 1 | 一元 |
+= | 加法指派 | 二進位 |
- | 減 | 二進位 |
- | 一元負運算 | 一元 |
-- | 遞減 1 | 一元 |
-= | 減法指派 | 二進位 |
-> | 成員選取 | 二進位 |
->* |
成員指標選取 | 二進位 |
/ | 部門 | 二進位 |
/= | 除法指派 | 二進位 |
< | 小於 | 二進位 |
<< | 左移 | 二進位 |
<<= | 左移指派 | 二進位 |
<= | 小於或等於 | 二進位 |
= | 指派 | 二進位 |
== | Equality | 二進位 |
> | 大於 | 二進位 |
>= | 大於或等於 | 二進位 |
>> | 右移 | 二進位 |
>>= | 右移指派 | 二進位 |
[ ] | 陣列註標 | — |
^ | 互斥 OR | 二進位 |
^= | 互斥 OR 指派 | 二進位 |
| | 位元包含 OR | 二進位 |
|= | 位元包含 OR 指派 | 二進位 |
|| | 邏輯 OR | 二進位 |
~ | 一補數 | 一元 |
delete |
刪除 | — |
new |
新增 | — |
轉換運算子 | 轉換運算子 | 一元 |
1 有兩個版本的一元遞增和遞減運算符存在:遞增和後增。
如需詳細資訊,請參閱 運算元多載 的一般規則。 多載運算子的各種分類限制描述於下列主題:
下表中顯示的運算子無法多載。 資料表包含預處理器符號 # 和 ##。
不可重新定義的運算子
運算子 | 名稱 |
---|---|
. | 成員選取 |
.* |
成員指標選取 |
:: | 範圍解析 |
? : | 條件 |
# | 前置處理器轉換成字串 |
## | 前置處理器串連 |
雖然多載運算子通常由編譯器在程式碼中遇到時隱含地呼叫,不過也能像任何成員或非成員函式呼叫一樣地明確叫用:
Point pt;
pt.operator+( 3 ); // Call addition operator to add 3 to pt.
範例
下列範例會 + 多載 運算符來加入兩個複數,並傳回結果。
// operator_overloading.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
struct Complex {
Complex( double r, double i ) : re(r), im(i) {}
Complex operator+( Complex &other );
void Display( ) { cout << re << ", " << im << endl; }
private:
double re, im;
};
// Operator overloaded using a member function
Complex Complex::operator+( Complex &other ) {
return Complex( re + other.re, im + other.im );
}
int main() {
Complex a = Complex( 1.2, 3.4 );
Complex b = Complex( 5.6, 7.8 );
Complex c = Complex( 0.0, 0.0 );
c = a + b;
c.Display();
}
6.8, 11.2
本節內容
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應