所謂過載,就是重新賦予新的含義,函式過載就是對乙個已有的函式賦予新的含義,使之實現新功能。
運算子的過載主要存在兩種形式,一種是作為類的成員函式進行使用,另一種則是作為類的友元函式進行使用。運算子的過載的形式為:
返回型別 operator 運算子符號(引數說明)
例如,能否用「+」號進行兩個複數的相加,在c++中不能在程式中直接用運算子「+」對複數進行相加運算,使用者必須自己設法實現複數相加。例如使用者可以通過定義乙個專門的函式來實現複數相加。
/*
實現複數類中的運算子過載
定義乙個複數類過載運算子+、-、*、/,使之能用於複數的加減乘除。
方案一:使用類的成員函式完成運算子的過載;
*/#includeusing namespace std;
class complex
complex(double r,double i)
complex operator+(complex &c2);
complex operator-(complex &c2);
complex operator*(complex &c2);
complex operator/(complex &c2);
void display();
};//下面定義成員函式
complex complex::operator+(complex &c2) //定義過載運算子」+「的函式
complex complex::operator-(complex &c2)//定義過載運算子」-「的函式
complex complex::operator*(complex &c2)
complex complex::operator/(complex &c2)
void complex::display()
complex(double r,double i) //建構函式過載
friend complex operator+(complex &c1,complex &c2);
friend complex operator-(complex &c1,complex &c2);
friend complex operator*(complex &c1,complex &c2);
friend complex operator/(complex &c1,complex &c2);
void display();
};//下面定義友員函式
complex operator+(complex &c1,complex &c2) //定義過載運算子」+「的函式
complex operator-(complex &c1,complex &c2) //定義過載運算子」-「的函式
complex operator*(complex &c1,complex &c2) //定義過載運算子」*「的函式
complex operator/(complex &c1,complex &c2) //定義過載運算子」/「的函式
void complex::display()
注意在表示式中過載的運算子「+」左側應為complex類的物件,如
c3=c2+i;
不能寫成
c3=i+c2; //運算子「+」的左側不是類物件,編譯出錯
如果出於某種考慮,要求在使用過載運算子時運算子左側的運算元是整型量(如表示式i+c2,運算子左側的運算元i是整數),這時是無法利用前面定義的過載運算子的,因為無法呼叫i.operator+函式。可想而知,如果運算子左側的運算元屬於c++標準型別(如int)或是乙個其他類的物件,則運算子過載函式不能作為成員函式,只能作為非成員函式。如果函式需要訪問類的私有成員,則必須宣告為友元函式。可以在complex類中宣告:
friend complex operator+(int &i , complex &c); //第乙個引數可以不是類物件
在類外定義友元函式:
complex operator+(int &i , complex &c) //運算子過載函式不是成員函式
將雙目運算子過載為友元函式時,在函式的形參表列中必須有兩個引數,不能省略,形參的順序任意,不要求第乙個引數必須為類物件。但在使用運算子的表示式中,要求運算子左側的運算元與函式第乙個引數對應,運算子右側的運算元與函式的第二個引數對應。如
c3 = i + c2; //正確,型別匹配
c3 = c2 + i; //錯誤,型別不匹配
如何過載增量運算子 ++ 和 --
運算子++和—有前置和後置兩種形式,如果不區分前置和後置,則使用operator++( )或operator--( )即可;否則,要使用operator++( )或operator--( )來過載前置運算子,使用operator++(int)或operator--(int)來過載後置運算子,呼叫時,引數int被傳遞給值0。如下列程式段:
//過載增量運算子 ++ 和 --
#includeusing namespace std;
class complex
complex(int a,int b) //建構函式過載
void display();
complex operator ++(); //前置自增方式
complex operator ++(int); //後置自增方式(增加乙個int型別的形參)
};complex complex::operator ++()
complex complex::operator ++(int)
void complex::display()
complex(double r,double i) //建構函式過載
friend istream& operator>>(istream & , complex & );
friend ostream& operator<<(ostream & , complex & );
};//下面定義友員函式
istream& operator>>(istream & in, complex &c)
ostream& operator<<(ostream & out, complex &c)
運算子過載之過載型別運算子
普通型別 類型別 呼叫對應的只有乙個引數 引數的型別就是這個普通型別 的建構函式 需求 boy boy1 10000 薪資 建構函式boy int boy boy2 rock 姓名 建構函式boy char 普通型別賦值給類型別其實很簡單,就是專門的對這個賦值的型別定義乙個建構函式。編譯器在執行 的...
運算子過載 賦值運算子的過載
有時候希望賦值運算子兩邊的型別可以不匹配,比如,把乙個int型別變數賦值給乙個complex物件,或把乙個 char 型別的字串賦值給乙個字串物件,此時就需要過載賦值運算子 注意 賦值運算子 只能過載為成員函式 賦值運算子過載例項示例 include include using namespace ...
運算子過載
c 中的運算子 1。大多數系統預定義運算子都能過載 不值得過載 不能被過載 2過載不能改變優先順序 不能改變結合性 不能改變運算子所需運算元的個數 過載後,可按這些運算子的表達方式使用 運算子過載的語法 一 通過運算子過載函式進行過載 1。運算子過載函式是成員函式 語法形式 type x opera...