運算子過載

2021-08-20 07:06:17 字數 2926 閱讀 5451

運算子過載

運算子過載的意義

對於普通的資料成員,c++已經過載了基本的運算子,但是對於一些我們自己設定的類和結構體的新型別,運算子的功能不能直接對他們進行操作,所以就需要我們對運算子驚醒過載,實際意思就是,賦予運算子新的功能讓他們能夠對我們自己定義的類和結構體進行操作。

過載運算子的限制

可以過載的運算子

+   -   *   /   %   ^   &   |   ~

!   =   <   >   +=  -=  *=  /=  %

^=  &=  |=  <<  >>  >>= <<= ==  !=

<=  >=  &&  ||  ++  --  ->* 『  ->

()  new delete  new   delete

不能過載的算符     

.     ::    .*    ?:    sizeof

過載運算子可以對運算子做出新的解釋,己定義使用者所需要的各種操作,但是運算子基本語義保持不變

l  不改變運算子的優先順序;

l  不改變運算子的結合性

l  不改變運算子所需要的運算元

l  不能建立新的運算子

運算子過載的語法形式

成員函式過載

返回型別 operator op(運算子)(參數列)

成員函式過載預設運算子左資料為類資料成員

友元函式過載

friend  返回型別 opeartor op(運算子)(參數列)

另,過載有賦值含義的運算子時有在opeartor 前面加& (引用)

對於賦值運算子和位址運算子系統提供預設預設過載版本

賦值運算子 = ,系統預設過載為物件資料成員的賦值

位址運算子 & ,系統預設過載為返回任何類物件的位址

例如:

#include using namespace std;

class complex

complex(double r,double i)

complex operator + (complex &c2)

friend complex operator -(complex&c1,complex &c2);

void display();

private:

double real;

double imag;

};complex operator -(complex&c1,complex &c2)

void complex::display( )

time(int m,int s):minute(m),sec(s)

time operator++( ); //宣告前置運算子 ++x

time operator++(int); //宣告後置運算子 x++

//此時後置運算子需要乙個形參表示後置運算子,此形參沒有實際意義

void display();

private:

int minute;

int sec;

};time time::operator++( ) //定義前置自增運算子「++」過載函式

return *this; //返回當前物件值

}timetime::operator++(int) //定義後置自增運算子「++」過載函式

return temp; //返回的是自加前的物件

}void time::display()

time(int m,int s):minute(m),sec(s)

friend time operator++(time &t ); //宣告前置運算子 ++x

friend time operator++(time&t,int); //宣告後置運算子 x++

//此時後置運算子需要乙個形參表示後置運算子,此形參沒有實際意義

void display();

private:

int minute;

int sec;

};time operator++(time &t) //定義前置自增運算子「++」過載函式

return t; //返回當前物件值

}time operator++(time &t,int) //定義後置自增運算子「++」過載函式

return temp; //返回的是自加前的物件

}void time::display()

;double f :: operator ( ) ( double x, double y )

int main ( )

過載輸入輸出符

istream 和 ostream 是 c++ 的預定義流類

cin 是 istream 的物件,cout 是 ostream 的物件

運算子 << 由ostream過載為插入操作,用於輸出基本型別資料

運算子 >> 由istream 過載為提取操作,用於輸入基本型別資料

用友元函式過載 << 和 >> ,輸出和輸入使用者自定義的資料型別

定義輸出運算子「<<」過載函式的一般格式如下:

ostream& operator <<(ostream& out,const class_name& obj)

樣例:#include using namespace std;

class point

;istream & operator>>(istream & in, point &p)

ostream &operator<<(ostream & out,const point &p)

{ out<<"("<>p;

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...