C 運算子過載函式

2021-09-09 01:32:08 字數 1381 閱讀 8485

5.運算子過載

5.1 在類外定義的運算子過載函式

c++為運算子過載提供了一種方法,即在執行運算子過載時,必須定義乙個運算子過載函式,

其名字為operator,後隨乙個要過載的運算子。例如,要過載"+"號,應該寫乙個名字為operator

的函式,其他的運算子也是如此。

函式 功能

operator+ 加法

operator- 減法

operator* 乘法

operator< 小於

因此,若要兩個物件相加,需要先定義乙個運算子過載函式operator+,例如:

class

complex

}; complex

operator+(complex om1,complex om2)

這樣,就可以方便使用語句:

int

main()

//上述兩個注釋語句是等價的,顯然前者更簡單明瞭。

//例5.1 兩個complex類物件相加的完整程式

#includeusing

namespace

std;

class

complex

}; complex

operator+(complex om1,complex om2) //

定義運算子+的過載函式

int main(int argc, char**agrv)

.(成員訪問運算子) .*(成員指標訪問運算子) ::(作用域符) sizeof(長度運算子) ?:(條件運算子)

(2)不允許使用者定義新的運算子作為過載運算子

(3)過載的功能應當與原有的功能相類似(+就是實現加法,-就是實現減法)

(4)過載不能改變運算子的操作物件(即運算元)。例如,"+"就是乙個雙目運算子(即只能代兩個運算元),過載後仍為雙目運算子,需要兩個引數。

(5)過載不能改變運算子原有的優先順序。但是可以採用加"()"的辦法進行強制轉換。

(6)過載不能改變運算子原有的結合特性.例如,乘除法運算子都是從左往右結合的.必要時,可以採用加"()"的辦法

(7)運算子過載函式的引數至少應有乙個是類物件(或類物件的引用)。也就是說,運算子過載函式的引數不能全是c++的標準型(基本資料型別)。目的是:防止使用者修改標準型別資料的運算子性質。 

(8)運算子過載函式可以是普通函式,也可以是類的成員函式,還可以是類的友元函式。

(9)一般而言,用於類物件的運算子必須過載,但是賦值運算子"="除外,不必使用者進行過載,系統已經為每乙個新宣告的類過載了乙個賦值運算子函式,它的作是逐個複製類的資料成員,可以直接用於物件之間的賦值,使用者不必自己編寫運算子過載函式。

C 運算子過載函式之成員運算子過載函式

5.2.3 成員運算子過載函式 在c 中可以把運算子過載函式定義為某個類的成員函式,稱之為成員運算子過載函式。1.定義成員運算子過載函式的語法形式 1 在類的內部,定義成員運算子過載函式的格式如下 函式型別 operator 運算子 形參表 2 成員運算子過載函式也可以在類中宣告成員函式的原型,在類...

C 運算子過載函式

在c 中不可過載的運算子有 sizeof 可過載的運算子有 new delete 其中注意一下 c 中new和delete與c語言中malloc和free不一樣。c語言中malloc和free市庫函式 在c 中new和delete是運算子 在使用new時相當於預設使用建構函式 malloc,在使用d...

C 運算子過載和函式過載

c 允許在同一作用域中的某個函式和運算子指定多個定義,分別稱為函式過載和運算子過載。過載宣告是指乙個與之前已經在該作用域內宣告過的函式或方法具有相同名稱的宣告,但是它們的引數列表和定義 實現 不相同。當呼叫乙個過載函式或過載運算子時,編譯器通過把您所使用的引數型別與定義中的引數型別進行比較,決定選用...