運算子過載

2021-08-01 10:52:51 字數 3397 閱讀 5042

一.什麼是運算子過載:

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...