共用方式為


運算子多載

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

請參閱

參考

C + + 運算子

C + + 關鍵字