4 運算子過載

2021-08-21 19:36:57 字數 1524 閱讀 6447

什麼是運算子過載

所謂過載,就是重新賦予新的含義。函式過載就是對乙個已有的函式賦予新的含義,使之實現新功能,因此,乙個函式名就可以用來代表不同功能的函式,也就是」一名多用」,運算子也可以過載。

1為什麼會用運算子過載機制

用複數類舉例

complex c3 = c1 + c2;

原因 complex是使用者自定義型別,編譯器根本不知道如何進行加減

編譯器給提供了一種機制,讓使用者自己去完成,自定義型別的加減操作。。。。。

這個機制就是運算子過載機制

2 運算子過載的本質是乙個函式

運算子過載的限制

以下運算子不能過載

除以上運算子不能過載外大部分運算子可以過載。過載運算子函式可以對運算子作出新的解釋,但原有基本語義不變:

運算子過載基礎

例如://全域性函式 完成 +操作符 過載

complex operator+(complex &c1, complex &c2)

//類成員函式 完成 -操作符 過載

complex operator-(complex &c2)

二元運算子

過載為成員函式時,解釋為由左運算元呼叫,左運算元通過 this 指標傳遞,右運算元通過引數傳遞。

過載為友元函式時,左右運算元都由引數傳遞。

一元運算子

過載為成員函式時,運算元通過 this 指標傳遞。

過載為友元函式時,運算元由引數傳遞。

前置和後置運算子總結

c++中通過乙個佔位引數來區分前置運算和後置運算,有佔位引數的為後置運算子。

友元函式和成員函式的選擇方法

當無法修改左運算元的類時,使用全域性函式進行過載

=,  [ ] , ( ) 和 -> 操作符只能通過成員函式進行過載

用友元函式過載 << >> 例項

class mystring

;ostream &operator <

istream &operator >>(istream &in, mystring &s)

; in >> str;

if (s.m_data != null)

s.m_len = strlen(str);

s.m_data = new char[s.m_len + 1];

strcpy(s.m_data, str);

return in;

}

為什麼不要過載 && 和 | | 運算子

1)&&和||是c++中非常特殊的操作符 

2)&&和||內建實現了短路規則 

3)操作符過載是靠函式過載來完成的 

4)運算元作為函式引數傳遞 

5)c++的函式引數都會被求值,無法實現短路規則 

分數運算子過載(4)

all right reserved.檔名稱 test.cpp 作 者 韓雙志 完成日期 2016年5月31日 版本號 v1.0 問題描述 實現分數類中的運算子過載,在分數類中可以完成分數的加減乘除 運算後再化簡 比較 6種關係 的運算。輸入描述 輸入兩組分數 輸出描述 輸出6種的結果 includ...

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

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

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

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