一.什麼是運算子過載:
c++預定義中的運算子的操作物件只侷限於基本的內建資料型別,但是對於我們自定義的型別(類)是沒有辦法操作的。但是大多時候我們需要對我們定義的型別進行類似的運算,這個時候就需要我們對這麼運算子進行重新定義,賦予其新的功能,以滿足自身的需求。
過載為類的成員函式||過載為類的非成員函式。
對於成員函式來說,乙個運算元通過this指標隱式的傳遞,(即本身),另乙個運算元作為函式的引數顯示的傳遞;對於友元函式(非成員函式)兩個運算元都是通過引數來傳遞的。
(1)一般來說,彈幕運算子過載為類的成員函式,雙目運算子過載為類的友元函式(一般情況下)
(2)雙目運算子不能將 = 。 ()【】。-> 過載為類的友元函式。
(3)如果運算子的第一次運算元要求為隱式轉換則必須為友元函式。
(4)當最左邊的要求為類物件,而右邊的是乙個內建型別,則要為友元函式。
二.運算子過載的實質:
運算子過載的實質就是函式過載或函式多型。運算子過載是一種形式的c++多型。目的在於讓人能夠用同名的函式來完成不同的基本操作。要過載運算子,需要使用被稱為運算子函式的特殊函式形式,運算子函式形式:operatorp(argument-list)//operator 後面的』p』為要過載的運算子符號。
類的運算子過載
過載知識點
1.過載運算子
1.1引言
1.2限定及過載語法
1.2.1限定
1.2.2過載語法
1.3過載運算子設計指導
1.4成員/非成員函式過載
1.5成員函式過載
1.6非成員函式(友元函式)過載
1.7過載例項
1.7.1過載輸入輸出符<<,>>
1.7.2過載演算法運算子+,-
1.7.3過載關係運算子==,!=,>,<=,<,>=
1.7.4過載賦值運算子=
1.7.5過載下標結算符
1.7.6過載前置自增++,自減–和過載後置自增++,自減–
1.7.7過載成員訪問符->和*
1.7.8過載呼叫操作符()
1.7.9過載轉換操作符operator (type)
1前言
過載運算子目的:
1.用操作整數的各種運算方法,讓運算子過載讓類也具有整數的各種簡單運算
2.我們對類產生的物件進行非常方便的運算操作,讓**、簡潔明瞭,操作方便
2 定義
2.1限定及過載語法
可以過載的運算子
+ - * / % ^
& | ~ ! = < >
+= -= *= /= %= ^= &= |=
<< >> >>= <<=
== != <= >=
&& ||
++ – -> * , ()
new delete new delete
不可以過載的運算子
:: . .* ?: sizeof typeid
分類 算術運算子 + - * / % ^ ++ –
復合算術運算子 += -= *= /= %= ^=
位運算子 & | ~ !
復合位運算子 &= |=
邏輯運算子 && ||
關係運算子 == != <= < > >=
記憶體管理符 new delete new delete
輸入輸出運算子 << <<= >> >>=
2.2定義過載語法
語法:returntype operator op(類引數)
中文: 返回型別 operator 運算符號(引數)
例子:
item operator+(const item&,const item&);
2.3成員函式實現操作符過載
使用情況:通常對類本身的運算子過載
如類nameclass的運算子函式名稱operator op
如x,y都是類nameclass的生成的物件,如果過載並實現了operator op
我們可以做這樣的計算x op y,編譯器會自動翻譯成如下x.operator op(y)
如op是過載的運算子是加法(+),那麼可變成x+y,編譯器會變成x.operator+(y)
計算順序是:
x op y變成x=x op y,運算結果存入到x,
x.operator+(y)
第乙個運算元是類的物件x,也就是隱含的物件指標this,
第二個運算元是引數y,物件x與的資料成員逐個一一相加,
返回結果:是計算完畢後返回到左邊的物件,它返回的必須是物件,而不能是其它資料型別
.過載下標取值運算子例項
定義operator
class foo
; 實現operator
int& foo::operator(const size_t index)
2.4非成員函式(友元函式)實現操作符過載
使用情況:類的物件之間進行的演算法運算子,關係運算子,輸入輸出
假設#是運算符號
類nameclass的友元函式過載名稱operator#
如x,y都是類nameclass的生成的物件,如果過載並實現了友元函式 operator#
我們可以做這樣的計算x # y,編譯器會自動翻譯成如下operator#(x,y)
計算順序是:
x op y變成op(x,y),運算結果存入到新的臨時物件,operator+(x,y)
絕對無物件指標this,返回值不會存入到x,y,而是返回新的臨時物件
第乙個運算元是類的物件x,
第二個運算元是引數y,
物件x與y的資料成員逐個一一相加,
返回結果:建立乙個新的返回物件,如算術運算子返回另乙個物件,關係運算子返回bool值
類的運算子過載的友元函式實現格式
友元函式定義格式
friend returntype operator op(const classname&,const classname&)const;
友元函式實現格式
returntype operator op(const classname&,const classname&)
3過載例項
3.1過載輸入輸出符<<,>>
3.2過載演算法運算子-,*,/,%,^
3.3過載關係運算子==,!=
3.4過載賦值運算子=
3.5過載下標結算符
3.6過載前置自增++,自減–和過載後置自增++,自減–
3.7過載成員訪問符->和*
3.8過載呼叫操作符()
3.9過載轉換操作符operator (type)
3.1過載<<,>>
當我們對乙個類過載<<,>>運算子之後,就可以直接使用cout<
運算子過載之過載型別運算子
普通型別 類型別 呼叫對應的只有乙個引數 引數的型別就是這個普通型別 的建構函式 需求 boy boy1 10000 薪資 建構函式boy int boy boy2 rock 姓名 建構函式boy char 普通型別賦值給類型別其實很簡單,就是專門的對這個賦值的型別定義乙個建構函式。編譯器在執行 的...
運算子過載 賦值運算子的過載
有時候希望賦值運算子兩邊的型別可以不匹配,比如,把乙個int型別變數賦值給乙個complex物件,或把乙個 char 型別的字串賦值給乙個字串物件,此時就需要過載賦值運算子 注意 賦值運算子 只能過載為成員函式 賦值運算子過載例項示例 include include using namespace ...
運算子過載
c 中的運算子 1。大多數系統預定義運算子都能過載 不值得過載 不能被過載 2過載不能改變優先順序 不能改變結合性 不能改變運算子所需運算元的個數 過載後,可按這些運算子的表達方式使用 運算子過載的語法 一 通過運算子過載函式進行過載 1。運算子過載函式是成員函式 語法形式 type x opera...