C++學習第10篇-運算符重載

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)或<<(ostream& out, YourClass),必須作爲友元重載;

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

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


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

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

自增(++)和自減(--)運算符有前綴和後綴兩種形式。

因爲自增和自減函數修改了操作數,所以最好是成員函數重載的方式。

1)前綴方式:

\

2)後綴方式:

在重載後綴時,C++使用了傀儡的變量,即虛假的:



因爲後綴的方式,需要賦值返回自增自減之前的狀態;

8. 重載中括號運算符

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

通常在數組中使用。


中括號一般在處理一維數組時較爲有用。

9. 重載括號運算符

例如:


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

10. 重載類型轉換符

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


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


11. 拷貝構造函數和重載賦值運算符

1)拷貝構造函數

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


12. 淺拷貝和深複製

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

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

如果需防止拷貝:可以將含參構造函數和重載賦值運算符私有化即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章