C 運算子過載函式之成員運算子過載函式

2021-09-22 08:53:36 字數 2843 閱讀 9612

5.2.3 成員運算子過載函式

在c++中可以把運算子過載函式定義為某個類的成員函式,稱之為成員運算子過載函式。

1. 定義成員運算子過載函式的語法形式

(1)在類的內部,定義成員運算子過載函式的格式如下:

函式型別 operator 運算子(形參表)

(2)成員運算子過載函式也可以在類中宣告成員函式的原型,在類外定義。

在類的內部,宣告成員運算子過載函式原型的格式如下:

class x;

在類的外部定義,定義成員運算子過載函式原型的格式如下:

函式型別 operator運算子(參數列)

其中,x是友元函式的運算子過載函式所在類的類名;函式型別指定了成員運算子函式的返回值型別;operator是定義運算子過載函式的關鍵字;運算子即是要過載的運算子名稱,必須是c++中可過載的運算子;形參表中給出過載運算子所需要的引數和型別。由於成員運算子過載函式是該類的成員函式,所以在類外定義時必須綴上類名。

注意:在成員運算子過載函式的形參表中,若運算子是單目的,則參數列為空;若運算子是雙目的,則參數列中有乙個運算元。

2. 雙目運算子過載

對雙目運算子而言,成員運算子過載函式的形參表中僅有乙個引數,它作為運算子的右運算元。另乙個運算元(左操作

數)是隱含的,是該類的當前物件,它是通過this指標隱含地傳遞給函式的。例如

calss x;

在類中宣告過載"+"的成員運算子過載函式,返回型別為int,它具有兩個運算元,乙個是當前物件,另乙個是類x的物件a。

例5.5 用成員運算子過載函式進行複數的運算。

加法:(a+bi)+(c+di)=(a+c)+(b+d)i

減法:(a-bi)+(c-di)=(a-c)+(b-d)i

乘法:(a-bi)*(c-di)=(ac-bd)+(ad+bc)i

除法:(a-bi)/(c-di)=(a+bi)*(c-di)/(c*c+d*d)

#includeusing

namespace

std;

class

complex;

complex(

double r,double

i)

void

print();

complex

operator+(complex co); //

宣告運算子+的過載函式

complex operator-(complex co); //

宣告運算子-的過載函式

complex operator*(complex co); //

宣告運算子*的過載函式

complex operator/(complex co); //

宣告運算子/的過載函式

private

:

double real;//

複數的實部

double imag;//

複數的虛部

};complex complex::

operator+(complex co) //

定義運算子+的過載函式

complex complex::

operator-(complex co) //

定義運算子-的過載函式

complex complex::

operator*(complex co) //

定義運算子*的過載函式

complex complex::

operator/(complex co) //

定義運算子/的過載函式

void

complex::print()

intmain() /*

一般而言,如果在類x中採用成員函式過載雙目運算子@,成員運算子函式operator@所需要的

乙個運算元由物件aa通過this指標隱含地傳遞,它的另乙個運算元bb在參數列中顯示,則以下

兩種函式呼叫方法是等價的。

aa@bb; //隱式呼叫

aa.operator@(bb); //顯示呼叫

*/

3. (成員運算子過載函式)單目運算子過載

對單目運算子而言,成員運算子過載函式的參數列中沒有引數,此時當前物件作為運算子的乙個運算元。 

//例5.6 用成員函式過載單目運算子"++"

#includeusing

namespace

std;

class

coord

coord

operator++(); //

宣告成員運算子++過載函式

//void operator++();

void

print();

private:

intx,y;

}; coord coord::

operator++() //

定義成員運算子++過載函式

/*void coord::operator++()

*/void

coord::print()

intmain()

/*本例中主函式中呼叫成員運算子過載函式operator的兩種方式是等價的。

即 ++c ********** c.operator++()

其格式為: @aa; //隱式呼叫

aa.operator(); //顯示呼叫

從本例中還可以看出,當用成員函式過載單目運算時,沒有引數被顯示地傳遞給成員運算子

。引數是通過this指標隱含地傳遞給函式

*/

程式猿神奇的手,每時每刻,這雙手都在改變著世界的互動方式!

運算子過載 成員函式

檔名稱 test.cpp 完成日期 2016年5月14日 問題描述 請用類的成員函式,定義複數類過載運算子 使之能用於複數的加減乘 include using namespace std class complex complex double r,double i complex operator...

運算子過載之過載型別運算子

普通型別 類型別 呼叫對應的只有乙個引數 引數的型別就是這個普通型別 的建構函式 需求 boy boy1 10000 薪資 建構函式boy int boy boy2 rock 姓名 建構函式boy char 普通型別賦值給類型別其實很簡單,就是專門的對這個賦值的型別定義乙個建構函式。編譯器在執行 的...

C 運算子過載賦值運算子

自定義類的賦值運算子過載函式的作用與內建賦值運算子的作用類似,但是要要注意的是,它與拷貝建構函式與析構函式一樣,要注意深拷貝淺拷貝的問題,在沒有深拷貝淺拷貝的情況下,如果沒有指定預設的賦值運算子過載函式,那麼系統將會自動提供乙個賦值運算子過載函式。賦值運算子過載函式的定義與其它運算子過載函式的定義是...