運算子過載

2021-08-20 04:01:08 字數 1893 閱讀 4939

1.

作為成員函式

class complex

complex(doubler,double i)

complex operator+(complex&);//宣告operator+為一體,是函式名

private:

double  real;

double  imag; };

complex operator+(complex &c1)//通過this指標隱式訪問當前物件成員資料

complex c1,c2,c3;

c3=c1+c2;

/*當宣告為公用成員函式時上式等價於*/

c3=c1.operator(c2);

所以此種方式要求過載的運算子左側必須為類,因為這樣才能呼叫成員函式

2.作為友元函式

(visual c++不支援將過載函式作為友元函式,將標頭檔案iostream改為iostream.h即可)

宣告為友元是為了可以呼叫類中的私有成員

class complex

complex(double  r,double  i)

friend   complex operator+(complex);//宣告

private:

double  real;

double  imag; };

complex operator+(complex &c1,complex&c2)

complex c1,c2,c3;

c3=c1+c2;

/*當宣告為公用成員函式時上式等價於*/

c3= operator+(c1,c2);

這樣就不要求一定第乙個是類的物件了。但友元會破壞類的封裝性,盡量用成員函式。

1.     c++不允許使用者自己定義新的運算子,只能對已有的c++運算子進行過載。不能過載的運算子有五個:成員訪問運算子.  成員指標訪問符*  域運算子 ::  長度運算子 sizeof 條件運算子 ?:

2.     過載的運算子不能改變運算子運算物件的個數,也不能改變運算的優先順序與結合性。

3.     過載的運算子必須和使用者自定型別的物件一起使用,其引數至少有乙個是類物件。否則會影響c++基本資料型別的運算。

4.     =  & 不需要過載,=是因為系統已經為每乙個新宣告的類過載了乙個賦值運算子,作用是逐個複製類的資料成員。&就是返回物件在記憶體中的起始位址。

1.     c++規定,賦值運算子=,下標運算子,函式呼叫運算子(),成員運算子->,必須作為成員函式過載。

2.     流插入運算子《和流提取運算子》,型別轉換運算子函式只能作為友元函式。cin,cout的過載很厲害。

3.     一般將單目運算子與符合運算子過載為成員函式。

4.     一般將雙目運算子過載為友元函式,為了可以實現可交換性(引入轉換建構函式之後)。

單目運算子過載時,會有前置和後置兩種情況,區分方法如下:

eg:自增自減,c++規定在其運算子過載函式宣告定義中增加乙個int形參

time operator++();   //宣告前置++過載

time operator++(int);   //宣告後置++過載

增加這個引數只是為了與前置函式有所區分,此外沒有任何作用,在定義函式時也不必設定引數名,只需在括號中寫int即可。編譯系統在遇到過載後置運算子會自動呼叫此函式。

運算子過載中多使用引用,利用引用作為函式的形參可以在函式呼叫過程中不用傳遞值的方式進行虛實結合,而通過傳位址方式使形參成為實參的別名,而不必設定乙個形參來存放實參傳遞來的值,因此減少了時間和空間的開銷。

如果過載函式的返回值是物件的引用時,返回的不是常量,而是引用所代表的物件,他可以出現在賦值號的左側而成為左值,可以被賦值與其他操作,比如cout流當前值便可以連續使用《輸出。

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

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

運算子過載 賦值運算子的過載

有時候希望賦值運算子兩邊的型別可以不匹配,比如,把乙個int型別變數賦值給乙個complex物件,或把乙個 char 型別的字串賦值給乙個字串物件,此時就需要過載賦值運算子 注意 賦值運算子 只能過載為成員函式 賦值運算子過載例項示例 include include using namespace ...

運算子過載

c 中的運算子 1。大多數系統預定義運算子都能過載 不值得過載 不能被過載 2過載不能改變優先順序 不能改變結合性 不能改變運算子所需運算元的個數 過載後,可按這些運算子的表達方式使用 運算子過載的語法 一 通過運算子過載函式進行過載 1。運算子過載函式是成員函式 語法形式 type x opera...