操作符過載的兩種用法(前置後置 )

2021-08-04 19:58:23 字數 1318 閱讀 6228

一.操作符過載基礎:

運算子函式是一種特殊的成員函式或友元函式

1.過載為類成員函式,解釋為:

objectl.operator op(objectr)

左運算元由objectl通過this指標傳遞,右運算元由引數objectr傳遞

2.過載為友元函式,解釋為:

operator op(objectl,objectr)

左右運算元都由引數傳遞

3.為什麼要有操作符過載

a=a+b;//int是基礎型別,c++編譯器已經為這些型別提供+操作

complex c1=c1+c2;//complex是自定義型別,編譯器根本不知道如何加,但c++編譯器會給你提供乙個機制,讓你實現自定義型別+

例子**如下,重要的地方有標記:

class complex

void print()

private:

int a;

int b;

//通過類的成員函式實現-操作;左運算元被隱藏在this指標,右運算元就在引數中

public:

complex operator-(complex &c2)

public:

complex& operator--()/

/通過類的成員函式實現--操作;左運算元被隱藏在this指標,右運算元就在引數中

};complex operator+(complex &c1, complex &c2)//全域性函式實現+操作寫法

complex& operator++( complex &c2)//全域性函式實現++操作寫法

void main()

//後置--

complex operator--(int)

complex tmp = *this;

this->a --;

this->b --;

return tmp;

//後置++

complex operator++(int)

complex tmp = *this;

this->a ++;

this->b ++;

return tmp;

二.操作符過載的三個步驟(類成員函式方法進行的時候)

//目標:通過類的成員函式,完成操作符過載

1.要承認操作符過載是乙個函式,完成操作符過載

2.寫出函式呼叫語言 c1.operator-(c2)

3.完善函式原型

全域性函式過載操作符友元用武之地

原因:cout<

operator<<(cout,c1);

cout.operator<<(c1);

過載前置操作符和後置操作符

i i的值作為返回值,i自增1 i i自增1,i的值作為返回值 現代編譯器產品會對 進行優化 優化使得最終的二進位制程式更加高效 優化後的二進位制程式丟失了c c 的原生語義 不可能從編譯後的二進位制程式還原c c 程式 操作符可以被過載 全域性函式和成員函式均可以進行過載 過載前置 操作符不需要額...

前置操作符和後置操作符

操作符可以被過載 全域性函式和成員函式均可以進行過載 過載前置 操作符不需要額外的引數 過載後置 操作符需要乙個int型別的佔位引數 來看乙個例子 include include using namespace std class test intvalue test operator test o...

區別前置 後置操作符

對於從c轉業者都知道 以 舉例 前置 累加後取出 後置 取出後累加在過載 操作符的時候,為了避免前置跟後置的區別,讓後置有乙個int的傳參。class upint public upint operator 前置 const upint operator int 後置upint i i 呼叫i.op...