5 操作符過載與臨時物件

2022-02-14 14:33:41 字數 2222 閱讀 2514

1. 操作符過載之一:把操作符過載成成員函式

在c++裡面,操作符是一種函式,這是c++的一大特點。

操作符過載的原因:

對於成員函式:+=

2. return by reference的故事(傳遞者無需知道接收端是以by reference還是by value的形式接收object,如果是前者,就收的就是object的位址)

3. 返回值是寫void還是寫乙個具體型別的故事

如果使用者只是這樣呼叫+=這個過載函式:c2+=c1,那麼返回型別complex&寫成void是沒有問題的。但如果這樣呼叫:c3+=c2+=c1,返回void型別的話,就有問題了。

4. 在class body(類區域)外面定義函式

5. 操作符過載(操作符是非成員函式的情況,無隱含引數this(指標))

為了應付客戶的3種可能用法,需要在類體外寫3個對應的處理加法的函式

5. 臨時物件(temp object)的故事

下面這些函式絕對不可以return by reference, 因為,它們返回的必定是個local object.

一定要return by value.

typename();(類名後面+小括號),這是乙個特殊語法,是建立臨時物件的特殊語法。如下面函式體中的complex()就是在建立臨時物件,臨時物件的生命週期就是這建立的那一行,到下一行生命就結束了。

再比如:

6. 單目運算子+,-的過載(正號操作,取反操作)

第乙個正號操作,返回的是原來的東西,沒有產生新的東西(新的local object,而下面**中取反的操作產生了新的東西),那完全可以retrun by reference啊,這個是標準庫裡面的東西,那麼厲害的人會注意不到這一點嗎?有可能。這裡其實可以retrun by reference。complex後面可以加個&

網友1:因為引數是const complex& x(const 型變數引用),如果返回值是引用的話,相當於去掉了const. 所以還是應該return by value. 實驗了一下,果然是這樣,retrun by reference(即寫成inline complex&)的話,生成解決方案的時候會出錯:錯誤c2440「return」: 無法從「const complex」轉換為「complex &」

網友2:因為傳入的引數是const型別的引用,如果將返回值改成引用,相當於將const型別轉換為非const型別,這在編譯上是通不過的。

7. 雙目操作符「==」的過載

3種情況:

寫乙個函式一般考量兩個點,這兩點影響著程式執行的效率:

8. 雙目操作符「!=」的過載

9. 共軛複數

9. 過載輸出操作符「<

可以說的有以下幾點:

註解:函式體重多個《相當於連續呼叫《函式。

如果《的返回值型別是void,則無法連續呼叫,必須返回ostream型別的物件,才可以被繼續呼叫。

return os <

變數盡量寫在private區,因為變數不想被外界看到。

函式盡量寫在public區,因為函式主要用來被外界呼叫的。

1 5操作符過載與臨時物件

操作符過載與臨時物件 operator overloading 操作符過載 1,成員函式 this inline complex doapl complex ths,const complex r inline complex complex operator const complex r 而在i...

過載操作符與轉換

過載操作符函式 保留字operator後接需要定義的操作符號,有返回型別和形參表 不能過載的操作符有 不能通過連線其他合法符號來建立任何新的操作符 過載操作符必須具有乙個類型別運算元,以為如果只有內建型別物件的話,會重新定義原來的操作符 操作符的優先順序和結合性是固定的 不再具備短路求值特性 當運算...

模板與操作符過載

include include using namespace std template classu,class v bool mygreater u u,v v class student bool operator const int value const 過載student類中的 運算子 ...