運算子多載

operator關鍵詞會宣告函式,指定套用至類別實例時,運算符符號的意義。 這讓運算子有多個意義,或稱為「多載」。 編譯器會檢查運算元的類型,以區別運算子的不同意義。

語法

typeoperatoroperator-symbolparameter-list

備註

您可以用全域方式或以逐一類別為基礎,重新定義大多數內建運算子的函式。 多載運算子實做為函式。

多載運算子的名稱為 operatorx,其中 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

本節內容

另請參閱

C++ 內建運算子、優先順序和順序關聯性
關鍵字