一.操作符過載基礎:
運算子函式是一種特殊的成員函式或友元函式
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...