運算子過載

2021-08-26 21:38:55 字數 3146 閱讀 1183

所謂過載,就是重新賦予新的含義,函式過載就是對乙個已有的函式賦予新的含義,使之實現新功能。

運算子的過載主要存在兩種形式,一種是作為類的成員函式進行使用,另一種則是作為類的友元函式進行使用。運算子的過載的形式為:

返回型別 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...