運算子過載

2021-08-20 06:50:33 字數 3563 閱讀 5090

運算子過載使得使用者自定義的資料以一種更簡潔的方式工作

具體格式

class x

在類外定義成員運算子函式的格式如下:

返回型別 x::operator運算子(形參表)

過載運算子的限制

1:不能過載的算符

.  ::  .*  ?: 

sizeof

c++中

不能用友元函式過載的運算子有

=   

()    []   -

>

2:過載運算子函式可以對運算子作出新的解釋,但原有基本語義不變:

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

改變運算子

的結合性

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

不能建立新的運算子

例子:有乙個time類,包含資料成員minute(分)和sec(秒),模擬秒錶,每次走一秒,滿60秒進一分鐘,此時秒又從0開始算。要求輸出分和秒的值。

class time

time(int

m,int

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

time

operator++( );     //

宣告前置自增運算子「

++」過載函式

time

operator++(int);   //

宣告後置自增運算子「

++」過載函式

private:

intminute;

intsec; };

time

time∷operator

++( )    //

定義前置自增運算子「

++」過載函式

return*this;         

//返回當前物件值 }

time

time∷operator

++(int)  //

定義後置自增運算子「

++」過載函式

returntemp;

//返回的是自加前的物件 }

注意: 1:

成員運算子函式比友元運算子函式少帶乙個引數(後置的++、--需要增加乙個形參)。

2: 雙目運算子一般可以被過載為友元運算子函式或成員運算子函式,但當運算元型別不相同時,必須使用友元函式。

一元運算子

object 

op或   

opobject

過載為成員函式,解釋為:

object .

operator op()

運算元由物件

object

通過this

指標隱含傳遞

過載為友元函式,解釋為:

operatorop

(object)

運算元由參數列的引數

object

提供 

二元運算子

過載為成員函式,解釋為:

objectl

. operatorop

( objectr)

左運算元由

objectl

通過this

指標傳遞,右運算元由引數

objectr傳遞

過載為友元函式,解釋為:

operatorop

( objectl

, objectr)

左右運算元都由引數傳遞 

前置,後置設a 

aobject;

運算子

++和

- -

有兩種方式:

前置方式:

++aobject

--aobject

成員函式

過載a:: a operator++ () ;

解釋為:

aobject

. operator ++( ) ;

友元函式

過載frienda operator++ (a &) ;

解釋為:  operator ++(

aobject

) ;  

後置方式:

aobject

++ 

aobject--

成員函式

過載a:: a  operator++ (int) ;

解釋為:

aobject

. operator ++( 0 ) ;

友元函式 

過載:friend a operator++ (a &, int) ;

解釋為:

operator++(

aobject

,0) 

過載++--

time

operator++( );     //

宣告前置自增運算子「

++」過載函式

time

operator++(int);   //

宣告後置自增運算子「

++」過載函式

【】()運算子使用

運算子用於訪問資料物件的元素

過載格式 

型別 

類::operator  (

型別) ;

()運算子用於函式呼叫

過載格式 

型別  類

:: operator()  (

參數列) ;

注意:

運算子和()是二元運算子

和()只能用成員函式過載,不能用友元函式過載 

過載輸出輸入流

cin是

istream

的物件,

cout

是ostream

的物件

運算子

<<

由ostream

過載為插入操作,用於輸出基本型別資料

運算子

>>

由istream

過載為提取操作,用於輸入基本型別資料

用友元函式過載

<<

和》,輸出和輸入使用者自定義的資料型別 

例如:istream&operator>>(istream&in,class_name&obj)

注意:只能被過載成友元函式,不能過載成成員函式

賦值運算子過載用於物件資料的複製

operator=必須過載為成員函式

總結:運算子過載是給以運算子新的定義功能,來更方便的進行計算實現功能。

過載運算子總體可以分為兩類:成員函式過載,友元函式過載

本章總的學習是一元二元運算子過載 關係運算子過載 輸出輸入運算子過載 ++和--運算子過載 賦值運算子過載

()【】運算子過載

過載的運算子是帶有特殊名稱的函式,函式名是由關鍵字 operator 和其後要過載的運算子符號構成的。與其他函式一樣,過載運算子有乙個返回型別和乙個引數列表

類成員訪問運算子( -> )可以被過載,但它較為麻煩。它被定義用於為乙個類賦予"指標"行為。運算子 -> 必須是乙個成員函式。如果使用了 -> 運算子,返回型別必須是指標或者是類的物件。

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

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

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

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

運算子過載

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