運算子過載

2021-10-16 10:34:58 字數 3952 閱讀 9118

運算子過載:運算子過載的方法是定義乙個過載運算子函式。格式如下:

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

int

operator+(

int a,

int b)

:用運算子過載使兩複數相加

#include

using

namespace std;

class

complex

//定義建構函式

complex

(double r,

double i)

//建構函式過載

complex operator

+(complex&c2)

;//宣告過載運算子+的函式

void

display()

;private

:double real;

//實部

double imag;

//虛部};

complex complex::

operator

+(complex&c2)

//定義過載運算子

void complex::

display()

intmain()

c1+c2解釋為c1.operator+(c2)即以c2為實參呼叫c1的運算子過載函式operator+,進行兩個複數相加。

上面的運算子過載函式可以更加簡練:

complex complex::operator+(complex&c2)

不能過載的運算子:. \ * \ :: \ sizeof \ ?:

過載不能改變運算子運算物件的個數

不能改變運算子的優先級別

不能改變運算子的結合性

必須和使用者自定義的自定義型別的物件一起使用,其引數至少有乙個類物件或類物件的引用

成員函式:

complex complex::

operator

+(complex&c2)

//定義過載運算子

為什麼只有乙個引數呢:實際上有兩個引數,由於過載函式是complex類中的成員函式,因此有乙個引數是隱含的,運算子函式是用this指標隱式的訪問類物件的成員

友元函式:

;complex operator

+(complex&c1,complex&c2)

運算子函式不作為成員函式,而是類外的普通的函式,在complex類中宣告它為友元函式。可以看到裡面有兩個引數。

二者區別:

運算子過載函式作為成員函式,它可以通過this指標自由地訪問本類的資料成員,因此可以少寫乙個引數。

作為成員函式,要求第乙個引數是乙個類物件且與運算子型別相同

作為友元函式運算子左側與函式第乙個引數對應,右側與第二個引數對應

**例:**過載運算子》

#include

#include

using

namespace std;

class

string

string

(char

*str)

;friend

bool

operator

>

(string&string1,string&string2)

;//宣告運算子為友元函式

void

display()

;private

:char

* p;

//字元型指標用於指向字串};

string::

string

(char

*str)

void string::

display()

bool

operator

>

(string&string1,string&string2)

//定義運算子過載

intmain()

string物件以字串「hello」作為實參,它的起始位址傳遞給建構函式的形參指標str,建構函式中,p指向hello

指導思想:先搭框架,逐步擴張,由簡到繁,最後完善。邊程式設計,邊除錯,邊擴充;

單目運算子只有乙個操作符,因此函式只有乙個引數。

:每六十秒進一分鐘

#include

using

namespace std;

class

time

//預設建構函式

time

(int m,

int s)

:minute

(m),

sec(s)

//建構函式過載

time operator++(

);//宣告運算子過載成員函式

void

display()

private

:int minute;

int sec;};

time time::

operator++(

)//定義運算子過載成員函式

return

*this

;//返回當前物件值

}int

main()

return0;

}執行結果:共輸出61行,到35:1

">>"

過載函式形式:istream&operator>>(istream&,自定義類&);

ostream &

operator

>>

(istream&output,complex&c)

只有在輸出complex類物件時才能用過載的運算子,對其他型別的物件無效。

"<<"

過載運算子:ostream&operator<<(ostream&,自定義類&);

用 轉換建構函式 進行不同型別資料的轉換

回顧學習過的建構函式

預設建構函式

complex();

用於初始化的建構函式

complex(double r,double i) ;

用於複製物件的複製建構函式

complex(complex&c);

轉換建構函式:complex(double r)只能有乙個引數

上面的示例: 只有乙個引數,作用是將double型的引數r轉換成complex類的物件,將r作為複數的實部。

型別轉換函式

一般形式:operator 型別名()

在函式名前不能指定函式的型別,函式沒有引數。型別轉換函式只能作為成員函式,因為轉換的主題是本類的物件。不能作為友函式或普通函式。

如果已經宣告了complex類

operator

double()

complex

(double r,

double i)

operator

double()

//定義型別轉換函式

private

:double real;

double imag;};

intmain()

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

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

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

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

運算子過載

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