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)或<
b)賦值=,中括號,呼叫()和成員選擇->,必須作為成員函式過載。
2)過載單元運算子+、-
成員函式的典型應用是用於修改私有成員變數。
7. 過載自增和自減運算子
自增(++)和自減(--)運算子有字首和字尾兩種形式。
因為自增和自減函式修改了運算元,所以最好是成員函式過載的方式。
1)字首方式:
\2)字尾方式:
在過載字尾時,c++使用了傀儡的變數,即虛假的:
因為字尾的方式,需要賦值返回自增自減之前的狀態;
8. 過載中括號運算子
中括號是必須成員函式過載的運算子之一。
通常在陣列中使用。
中括號一般在處理一維陣列時較為有用。
9. 過載括號運算子
例如:當然過載()運算子,也可以不帶引數。
10. 過載型別轉換符
之前,型別轉換有顯式和隱式轉換;
也可以進行其他的有用轉換:
運算子過載知識總結
1.運算子過載 1 過載規則 2 過載運算子的限制 過載運算子函式可以對運算子作出新的解釋,但原有基本語義不變 不改變運算子的優先順序 不改變運算子的結合性 不改變運算子所需要的運算元 不能建立新的運算子 3 運算子函式可以過載為成員函式或友元函式 1 一元運算子 object op或 opobje...
知識梳理 運算子過載
運算子過載的需求 c 預定義的運算子只能用於基本資料型別的運算 整型 實數型 字元型 邏輯性。數學上,兩個複數可以直接進行加減運算,但是c 中用於複數是不被允許的。如何讓物件也能通過運算子進行運算,使得 更加簡介易於理解。運算子過載就是對已有的運算子賦予多重的含義,使得統一運算子作用於不同型別的資料...
C 運算子過載相關知識
c 允許在同一作用域中的某個函式和運算子指定多個定義,分別稱為函式過載或者運算子過載。程式設計師可以重定義或過載大部分 c 內建的運算子。這樣,他就能使用自定義型別的運算子。過載的運算子是帶有特殊名稱的函式,函式名是由關鍵字 operator 和其後要過載的運算子符號構成的。與其他函式一樣,過載運算...