C++運算子過載
轉載:http://blog.csdn.net/zuheyawen/article/details/7340717
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. 淺拷貝和深複製
淺拷貝-即只是將物件的值複製一個副本給其他物件;修改其他物件,不改變原來的物件;
深拷貝-將物件的引用指標返回給其他物件;修改了其他物件,同樣修改了原來物件
如果需防止拷貝:可以將含參建構函式和過載賦值運算子私有化即可。
【免責特此宣告:
1)本內容可能是來自網際網路的,或經過本人整理的,僅僅代表了網際網路和個人的意見和看法!
2)本內容僅僅提供參考,任何參考該內容造成任何的後果,均與原創作者和本部落格作者無關!】
相關文章
- C++ 運算子過載C++
- C++——運算子過載C++
- C++運算子過載詳解C++
- C++中運算子的過載C++
- C++ 過載運算子和過載函式C++函式
- C++過載的奧義之運算子過載C++
- 過載運算子
- 運算子過載
- C++運算子過載的一些困惑C++
- 教你快速理解C++中的運算子過載C++
- C++學習筆記(二) 運算子過載C++筆記
- 開心檔之C++ 過載運算子和過載函式C++函式
- [Lang] 運算子過載
- Python 運算子過載Python
- python之運算子過載Python
- c++ 運算子過載、執行緒安全實現單例C++執行緒單例
- Javascript實現運算子過載JavaScript
- 指標運算子過載(* 和 ->)指標
- 過載運算子的常見方法
- 【python隨筆】之【運算子過載】Python
- 過載運算子、解構函式函式
- 瞭解下C# 運算子過載C#
- 重拾Kotlin(18)-運算子過載Kotlin
- 深入C++05:運算子過載C++
- C++ 迭代器運算子 箭頭運算子->C++
- C++之【操作符】彙總 &【不能被過載的運算子】小記C++
- C++裡也有菱形運算子?C++
- 常用的過載運算子你瞭解幾個?
- Kotlin教程(七)運算子過載及其他約定Kotlin
- C#運算子過載---逐步地分析與理解C#
- 手寫程式語言-實現運算子過載
- C++11運算子過載詳解與向量類過載例項(<<,>>,+,-,*等)C++
- 開心檔之C++ 運算子C++
- C++運算子優先順序C++
- C++基礎知識篇:C++ 運算子C++
- 12 Python物件導向程式設計:運算子過載Python物件程式設計
- 運算子 運算子
- C++入門程式設計----C++運算子(8)C++程式設計