運算子多載
operator關鍵字宣告的函式指定什麼operator-symbol表示套用至類別的實例時。這提供一個以上的意義的運算子,或者"overloads 」 它。編譯器會區別不同的意義的運算子,藉由檢查其運算元的型別。
type operator operator-symbol ( parameter-list )
備註
全域或類別的類別為基礎,您可以重新定義大部分的內建運算子函的式。多載的運算子會實作為函式。
多載的運算子的名稱是operatorx,其中x是運算子下, 表中所顯示的樣子。比方說,如多載加法運算子,您可以定義函數,稱為operator+。同樣地,多載加法/設定運算子, +=,定義函式呼叫operator+=。
Redefinable 的運算子
運算子 |
名稱 |
型別 |
---|---|---|
, |
逗號 |
Binary |
! |
邏輯 NOT |
一元 |
!= |
不等於 |
Binary |
% |
模數 |
Binary |
%= |
模數設定 |
Binary |
& |
位元 AND |
Binary |
& |
傳址 |
一元 |
&& |
邏輯 AND |
Binary |
&= |
位元運算 AND 作業 |
Binary |
( ) |
函式呼叫 |
— |
( ) |
轉型運算子 |
一元 |
* |
乘法 |
Binary |
* |
指標取值 |
一元 |
*= |
乘法設定 |
Binary |
+ |
加入 |
Binary |
+ |
一元加號 |
一元 |
++ |
遞增值 1 |
一元 |
+= |
加法設定 |
Binary |
– |
減法 |
Binary |
– |
一元負運算 |
一元 |
–– |
遞減 1 |
一元 |
–= |
減法指派 |
Binary |
–> |
成員選擇 |
Binary |
–>* |
指標成員選取項目 |
Binary |
/ |
除法 |
Binary |
/= |
除法指派 |
Binary |
< |
小於 |
Binary |
<< |
左移 |
Binary |
<<= |
向左的移設定 |
Binary |
<= |
小於或等於 |
Binary |
= |
指派 |
Binary |
== |
相等 |
Binary |
> |
大於 |
Binary |
>= |
大於或等於 |
Binary |
>> |
右移 |
Binary |
>>= |
向右移位作業 |
Binary |
[ ] |
陣列註標 |
— |
^ |
獨佔式 OR |
Binary |
^= |
獨占 OR 指派 |
Binary |
| |
位元非互斥 OR |
Binary |
|= |
位元 (含) 或工作分派 |
Binary |
|| |
邏輯 OR |
Binary |
~ |
補數 |
一元 |
delete |
Delete |
— |
new |
New |
— |
conversion operators |
轉換運算子 |
一元 |
1 兩個版本的一元 (unary) 遞增和遞減運算子存在於: preincrement 和 postincrement。
請參閱的運算子多載化的一般規則如需詳細資訊。下列主題將描述各種類型的多載運算子的條件約束:
下表所示的運算子無法多載。包含前置處理器符號#和##。
Nonredefinable 運算子
Operator |
Name |
. |
成員選擇 |
.* |
指標成員選取項目 |
:: |
範圍解析 |
? : |
條件式 |
# |
前置處理器轉換成字串 |
## |
前置處理器串連 |
多載的運算子通常稱為隱含編譯器時遇到程式碼中,雖然他們可以叫用明確的任何成員一樣,或非成員函式被呼叫:
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();
}
Output
6.8, 11.2