運算子過載是對已有的運算子賦予多重含義,同乙個運算子作用於不同型別的資料導致不同型別的行為。
c++中預定義的運算子的操作物件只能是基本資料型別。實際上,對於很多使用者自定義型別,也需要有類似的運算操作,這就需要對運算子進行重新定義,增加新功能的要求。
不能過載的運算子有:
(1).成員訪問運算子
(2)::作用域運算子
(3)?:條件運算子
(4)成員指標運算子*
(5)編譯預處理命令的開始符號#
運算子過載規則
運算子過載的形式
1.成員函式
2.友元函式
(1)只能使用成員函式過載的運算子有: = () 【】
-> new delete.
(2)單目運算子最好過載為成員函式。
(3)對於復合的賦值運算子如+=、-=、*=、/= 、&=
!=、~=、%=、>>=、<<=建議過載為成員函式。
(4)對於其他運算子,建議過載為友元函式
用成員函式過載運算子
type operator 運算子(參數列)
//只要記住前運算元為物件本身就好!
一元運算子:參數列為空,當前物件作為此運算子的單運算元
二元運算子:參數列中有乙個運算元,當前物件作為此運算子的左運算元,參數列中的操作樹作為此運算子的右運算元,以此類推。
編譯器區分前字尾++的方法:引數表裡是否有int(就是個int)作為偽元,如果有就是字尾,無就是字首運算
實現:
type 類名::operator 運算子(參數列){}
例:
#include
class
distance
;//建構函式
distance operator
+ (distance d);//加法過載
distance operator
-(distance d);//減法過載
void display();//顯示資料
};distance distance::
operator
+(distance d)
distance result
(tkm ,km)
;return result;
}distance distance::
operator
-(distance d)
distance result
(tkm ,km)
;return result;
}void distace::display()
void
main()
在類的每個成員引數中都有乙個隱含的指標this,該指標變數的型別就是成員函式所屬的型別。
this指標變數可被自動初始化為發出函式呼叫的物件的位址。即指向函式物件。
this->number=a;
strcpy(this->name,b)
this->***=c;
distance distance::
operator++(
int)
//後置++
return temp;
}//用法:物件名++,(物件名++).display()
過載運算子的使用方法和原操作符一樣,只是運算元一定要是定義它的特定類的物件
用友元函式過載操作符
friend type operator(參數列);
友元函式不屬於任何類,它沒有this指標,這與成員函式完全不同。
若運算元是一元的,則參數列中有乙個運算元;若運算子是二元的則有兩個運算元,友元函式定義過載運算子時,所有的運算元均需要用引數來傳遞。友元運算子函式與成員運算子函式的主要區別就在於其引數個數不同。當運算子的左運算元是乙個常數時,就不能利用this指標,應當用友元函式過載。
友元運算子定義:
type operator 運算子 (參數列)
資料用物件.來訪問
在實現運算子過載是,實際是將運算子看成運算子函式,函式體中完成運算子要完成的相關功能。
C 的物件導向 運算子過載
從函式過載說起 什麼是運算子過載 運算子過載示例 include using namespace std class coordinate 預設建構函式 coordinate coordinate 帶引數建構函式 coordinate coordinate int x0,int y0 列印座標函式 ...
C 物件導向 C 過載運算子和過載函式
c 允許在同一作用域中的某個函式和運算子指定多個定義,分別稱為函式過載和運算子過載。過載宣告是指乙個與之前已經在該作用域內宣告過的函式或方法具有相同名稱的宣告,但是它們的引數列表和定義 實現 不相同。當您呼叫乙個過載函式或過載運算子時,編譯器通過把您所使用的引數型別與定義中的引數型別進行比較,決定選...
物件 運算子過載
函式解決運算 運算子過載 過載單目運算子 兩個物件的相加的實現 1 函式解決運算 includeusing namespace std 注意事項 1 不允許使用者自定義新的運算子,只能對已有的運算子進行過載 2 不能改變原有的運算子運算元的個數 3 不能改變原有運算子的等級 4 不能改變原有運算子的...