運算子過載程式舉例

2021-07-26 15:46:14 字數 2030 閱讀 8870

1. 運算子過載介紹

之前的函式過載,允許多個同名不同引數型別的函式;

運算子過載允許程式設計師如何使用運算子(如+、-、==、=和!)來處理不同型別的資料型別;

對於基本資料型別,運算子是可以使用的:

對於自定義資料型別:

如果為對自定義mystring的運算子+定義,會出現編譯錯誤。

當乙個運算子過載時,對於c++將會根據資料的型別,選擇合適的過載運算子;

c++中除了

arithmetic if (?:), sizeof,scope (::), member selector (.), and member pointer selector (.*)不能過載;

在進入話題前,必須清楚:

a)過載的運算運算元至少有乙個是自定義資料;

b)只能過載已有的運算子;

c)所有運算子保持其優先順序和結合;

2)運算子即函式

在c++中,運算子當作運算子看待,如<>等。

2. 過載算術運算子

算術運算子:+、-、*、/、%

這4個運算子都為二元,過載方式幾乎一樣。

1)使用友元函式過載運算子

當運算子不改變運算運算元,最好使用友元函式過載運算子。

2)對不同型別的運算元過載運算子

當為不同型別的運算元過載二元運算子時,都需寫2個函式。如上例的+的引數是乙個cent和整數時:

3. 過載i/o運算子

1)過載輸出符:<<

2)過載輸入符:>>

過載i/o運算子,便於將你的自定義類輸出;

4. 過載比較運算子

比較運算子:==、!=、>、>=、

因為比較運算子都是二元運算子,而且都不需要改變引數的值,可以使用友元函式進行過載;

依然使用硬幣類:

5. 過載單元運算子

單元運算子:+、-、!

6. 使用成員函式過載運算子

使用友元函式過載,不修改操作的引數相關值;

當需要修改運算元時,使用成員函式過載運算子;

需注意兩點:a)最左邊的運算元必須是類物件;b)最左邊的運算元類似於*this引數。

兩點例外:

a)最左邊引數不是類的成員,如過載+(int, yourclass)或<

b)賦值=,中括號,呼叫()和成員選擇->,必須作為成員函式過載。

2)過載單元運算子+、-

成員函式的典型應用是用於修改私有成員變數。

7. 過載自增和自減運算子

自增(++)和自減(--)運算子有字首和字尾兩種形式。

因為自增和自減函式修改了運算元,所以最好是成員函式過載的方式。

1)字首方式:

\2)字尾方式:

在過載字尾時,c++使用了傀儡的變數,即虛假的:

因為字尾的方式,需要賦值返回自增自減之前的狀態;

8. 過載中括號運算子

中括號是必須成員函式過載的運算子之一。

通常在陣列中使用。

中括號一般在處理一維陣列時較為有用。

9. 過載括號運算子

例如:

當然過載()運算子,也可以不帶引數。

10. 過載型別轉換符

之前,型別轉換有顯式和隱式轉換;

也可以進行其他的有用轉換:

11. 拷貝建構函式和過載賦值運算子

1)拷貝建構函式

拷貝建構函式是從乙個已有的物件初始化乙個新的物件 ;

12. 淺拷貝和深複製

淺拷貝-即只是將物件的值複製乙個副本給其他物件;修改其他物件,不改變原來的物件;

深拷貝-將物件的引用指標返回給其他物件;修改了其他物件,同樣修改了原來物件

如果需防止拷貝:可以將含參建構函式和過載賦值運算子私有化即可。

運算子過載舉例

運算子過載的函式一般地採用如下兩種形式 成員函式形式和友元函式形式。這兩種形式都可訪問類中的私有成員。1.過載為類的成員函式 這裡先舉乙個關於給複數運算過載複數的四則運算符的例子。複數由實部和虛部構造,可以定義乙個複數類,然後再在類中過載複數四則運算的運算子。先看以下源 include iostre...

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

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

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

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