過載方法:
成員函式過載
友元函式過載
運算子過載規則如下:
①、 c++中的運算子除了少數幾個之外,全部可以過載,而且只能過載c++中已有的運算子。不能過載的運算子只有五個,它們是:②、 過載之後運算子的優先順序和結合性都不會改變。
③、 運算子過載是針對新型別資料的實際需要,對原有運算子進行適當的改造。一般來說,過載的功能應當與原有功能相類似,不能改變原運算子的操作物件個數,同時至少要有乙個操作物件是自定義型別。
運算子名稱.
成員運算子
*指標運算子
::作用域運算子
sizeof()
sizeof
?:條件運算子
運算子過載形式有兩種,過載為類的成員函式和過載為類的友元函式。
運算子過載為類的成員函式的一般語法形式為:
函式型別 operator 運算子(形參表)
運算子過載為類的友元函式的一般語法形式為:
friend 函式型別 operator 運算子(形參表)
其中,函式型別就是運算結果型別;operator是定義運算子過載函式的關鍵字;運算子是過載的運算子名稱。
當運算子過載為類的成員函式時,函式的引數個數比原來的操作個數要少乙個;當過載為類的友元函式時,引數個數與原運算元個數相同。原因是過載為類的成員函式時,如果某個物件使用過載了的成員函式,自身的資料可以直接訪問,就不需要再放在參數列中進行傳遞,少了的運算元就是該物件本身。而過載為友元函式時,友元函式對某個物件的資料進行操作,就必須通過該物件的名稱來進行,因此使用到的引數都要進行傳遞,運算元的個數就不會有變化。
運算子過載的主要優點就是允許改變使用於系統內部的運算子的操作方式,以適應使用者自定義型別的類似運算。
」 -」 單目運算子 「負號過載
「++」 前置,後置運算子過載
「+」 運算子過載
「-」 運算子過載
「<<」 運算子過載(必須使用友元函式進行過載)
「」 索引運算子過載(必須使用成員函式進行過載)
coordinate.h
//
// created by butter on 16-8-5.
//#ifndef opreator_coordinate_h
#define opreator_coordinate_h
#include
class coordinate ;
#endif //opreator_coordinate_h
coordinate.cpp
//
// created by butter on 16-8-5.
//#include "coordinate.h"
#include
coordinate::coordinate()
coordinate::coordinate(int x, int y)
/*coordinate &coordinate::operator-()
*/int coordinate::getx()
int coordinate::gety()
coordinate &operator-(coordinate &c)
coordinate &coordinate::operator++()
coordinate coordinate::operator++(int)//標誌
coordinate coordinate::operator+(const coordinate &coor)
/*coordinate operator+(const coordinate &c1, const coordinate &c2)
*/std::ostream &operator
<< (std::ostream & output, coordinate & coor)
int coordinate::operator (int index)
C 運算子過載 過載特殊運算子
賦值運算子用於同類物件間的相互賦值。賦值運算子只能被過載為類的非靜態成員函式,不能過載為友元函式和普通函式。對於使用者自定義的類而言,如果沒有過載賦值運算子,那麼c 編譯器會為該類提供乙個預設的過載賦值運算子成員函式。預設賦值運算子的工作方式是按位對拷,將等到右邊物件的非靜態成員拷貝給等號左邊的物件...
C 運算子過載賦值運算子
自定義類的賦值運算子過載函式的作用與內建賦值運算子的作用類似,但是要要注意的是,它與拷貝建構函式與析構函式一樣,要注意深拷貝淺拷貝的問題,在沒有深拷貝淺拷貝的情況下,如果沒有指定預設的賦值運算子過載函式,那麼系統將會自動提供乙個賦值運算子過載函式。賦值運算子過載函式的定義與其它運算子過載函式的定義是...
C 運算子過載轉換運算子
為什麼需要轉換運算子?大家知道對於內建型別的資料我們可以通過強制轉換符的使用來轉換資料,例如 int 2.1f 自定義類也是型別,那麼自定義類的物件在很多情況下也需要支援此操作,c 提供了轉換運算子過載函式 它使得自定義類物件的強轉換成為可能。轉換運算子的生命方式比較特別,方法如下 operator...