C++學習第10篇-運算子多載

來源:互聯網
上載者:User

1. 運算子多載介紹

之前的函數重載,允許多個同名不同參數類型的函數;

運算子多載允許程式員如何使用運算子(如+、-、==、=和!)來處理不同類型的資料類型;

對於基礎資料型別 (Elementary Data Type),運算子是可以使用的:


對於自訂資料類型:


如果為對自訂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)或<<(ostream& out, YourClass),必須作為友元重載;

B)賦值=,中括弧[],調用()和成員選擇->,必須作為成員函數重載。

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


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

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

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

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

1)首碼方式:

\

2)尾碼方式:

在重載尾碼時,C++使用了傀儡的變數,即虛假的:



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

8. 重載中括弧運算子

中括弧是必須成員函數重載的運算子之一。

通常在數組中使用。


中括弧一般在處理一維數組時較為有用。

9. 重載括弧運算子

例如:


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

10. 重載類型轉換符

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


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


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

1)拷貝建構函式

拷貝建構函式是從一個已有的對象初始化一個新的對象 ;


12. 淺拷貝和深複製

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

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

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

【免責特此聲明:
1)本內容可能是來自互連網的,或經過本人整理的,僅僅代表了互連網和個人的意見和看法!
2)本內容僅僅提供參考,任何參考該內容造成任何的後果,均與原創作者和本部落格作者無關!】

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.