運算子過載

2021-08-20 10:28:07 字數 1733 閱讀 9554

運算子過載的方法是定義乙個過載運算子的函式,使指定的運算子不僅能實現原有的功能,而且能實現在函式中指定的新功能。運算子過載實際上是函式的過載。

過載運算子的函式一般格式如下:

函式型別  operator 運算子名稱 ( 形參表 )

對運算子的過載處理;

例子中實現了乙個簡單的複數相加。

#include using namespace std;

class complex

complex operator +( complex & r )

void display()

};int main()

說明:

1)c++編譯系統把程式中的表示式c1+c2解釋為c1.operaor+(c2)

2)同一運算子可以代表不同的功能,編譯系統是根據運算子兩側(如果是單目運算子則為一側)的資料型別決定的。

1)只能對已有的c++運算子進行過載。

2)c++中絕大部分的運算子可以過載。

不能過載的運算子只有5個:

. (成員訪問運算子)

* (成員指標訪問運算子)

::(域運算子)

sizeof(長度運算子)

?: (條件運算子)

3)過載不能改變運算子運算物件(即運算元)的個數

4)過載不能改變運算子的優先級別

5)過載不能改變運算子的結合性

6)過載運算子的函式不能有預設的引數

7)過載的運算子必須和使用者定義的自定義型別的物件一起使用,其引數至少應有乙個是類物件(或類物件的引用)

8)用於類物件的運算子一般必須過載,但有兩個例外,運算子「=」和「&」不必使用者過載:

(i) 系統已為每乙個新宣告的類過載了乙個賦值運算子,它的作用是逐個複製類的資料成員。

(ii)位址運算子&也不必過載,它能返回類物件在記憶體中的起始位址。

9)可以將乙個運算子過載為執行任意的操作,應當使過載運算子的功能類似於該運算子作用於標準型別資料時所實現的功能。

對運算子過載的函式有兩種處理方式:

(1)把運算子過載的函式作為類的成員函式

此時有乙個引數是隱含的,運算子函式是通過this指標隱式地訪問類物件的成員。

(2)運算子過載的函式不是類的成員函式(可以是乙個普通函式),在類中把它宣告為友元函式(友元函式的目的是方便訪問私有成員)。

如下例:

#include using namespace std;

class complex

friend complex operator +( complex & r1, complex & r2 )

void display()

};int main()

那什麼時候將運算子過載函式作為成員函式,什麼時候用友元函式方式?

1)如果將運算子過載函式作為成員函式。它可以通過this指標自由地訪問本類資料成員,因此可以少寫乙個函式的引數。但必須要求運算表示式第乙個引數(即運算子左側的運算元)是乙個類物件,而且與運算子函式的型別相同。

2) 將雙目運算子的表示式過載為友元函式時,由於友元函式不是該類的成員函式,因此在函式的形參表列中必須有兩個引數,不能省略。在使用運算子的表示式中,要求運算子左側的運算元與函式第乙個引數對應,運算子右側的運算元與函式的第二個引數對應。

運算子過載之過載型別運算子

普通型別 類型別 呼叫對應的只有乙個引數 引數的型別就是這個普通型別 的建構函式 需求 boy boy1 10000 薪資 建構函式boy int boy boy2 rock 姓名 建構函式boy char 普通型別賦值給類型別其實很簡單,就是專門的對這個賦值的型別定義乙個建構函式。編譯器在執行 的...

運算子過載 賦值運算子的過載

有時候希望賦值運算子兩邊的型別可以不匹配,比如,把乙個int型別變數賦值給乙個complex物件,或把乙個 char 型別的字串賦值給乙個字串物件,此時就需要過載賦值運算子 注意 賦值運算子 只能過載為成員函式 賦值運算子過載例項示例 include include using namespace ...

運算子過載

c 中的運算子 1。大多數系統預定義運算子都能過載 不值得過載 不能被過載 2過載不能改變優先順序 不能改變結合性 不能改變運算子所需運算元的個數 過載後,可按這些運算子的表達方式使用 運算子過載的語法 一 通過運算子過載函式進行過載 1。運算子過載函式是成員函式 語法形式 type x opera...