運算子過載

2021-08-20 07:09:32 字數 4087 閱讀 8768

過載是有規則的,首先,「過載運算子」是「過載」,而不是「定義」,所以只能改變乙個c++中已有的運算子,而不是定義乙個本來沒有的運算子。1.

c++只能過載c++中已有的運算子

.如:+-*

/%^&

|~!=

<

>

+=-=

*=/=%^=

&=|=

<<

>>

>>=

<<=

==!=

<=

>=

&&||

++--

->*

『->

()new

delete

newdelete

不能過載的操作符是類屬關係運算子如:.

::.*

?:sizeof

2.過載運算子後的優先順序和結合性都不會改變。

3.過載的運算子要與該運算本身的含義一致,不能導致混亂。

注:過載運算子時,其引數個數比實際上參與運算的個數少乙個。因為該物件自身也將參與運算。

過載型別

operator/*這是乙個過載運算子的關鍵字*/

過載運算符號

關係運算子過載

這裡要過載的十分多:>,>=,<,<=,==…那麼是不是要一一寫呢?答案是否定的,實際上你只需要寫出乙個<過載,然後其他運算子都可以用邏輯運算和已經過載的《表示出。

算數運算子過載

這個就要

過載哪個寫那個。。。。。。

一.

用成員函式或友元函式過載運算子

注:運算子函式也可以過載為成員函式或友元函式

1.

一元運算子

object  op    或    op  object

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

object . operator op ()

運算元由物件object通過this指標隱含傳遞

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

operator op (object)

運算元由參數列的引數object提供

2.

二元運算子

objectl  op objectr

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

objectl . operator op ( objectr )

左運算元由objectl通過this指標傳遞,右運算元由引數objectr傳遞

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

operator op ( objectl, objectr )

左右運算元都由引數傳遞

3.用成員函式過載運算子

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

class x

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

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

(1)雙目運算子過載為成員函式

對雙目運算子而言,成員運算子函式的形參表中僅有乙個引數,它作為運算子的右運算元,此時當前物件作為運算子的左運算元,它是通過this指標隱含地傳遞給函式的。

(2)單目運算子過載為成員函式

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

模擬秒錶的time類

class time

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

time operator++( );     //宣告前置自增運算子「++」過載函式

time operator++(int);   //宣告後置自增運算子「++」過載函式

private:

int minute;

int sec;

};4.

用友元函式過載

一般而言,採用成員函式過載單目運算子時,以下兩種方法是等價的:

@aa;                // 隱式呼叫

aa.operator@();    // 顯式呼叫

成員運算子函式operator @所需的乙個運算元由物件aa通過this指標隱含地傳遞。因此,在它的參數列中沒有引數。

注:c++中不能用友元函式過載的運算子有=    ()    []    ->典型設

a  aobject ;

運算子 ++和 - - 有兩種方式:

前置方式:

++aobject

--aobject

成員函式

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

解釋為:

aobject . operator ++( ) ;

友元函式

過載friend a operator++ (a &) ;

解釋為:

operator ++( aobject ) ;

後置方式:

aobject ++

aobject --

成員函式

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

解釋為:

aobject . operator ++( 0 ) ;

友元函式

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

解釋為:

operator++(aobject, 0)

二.過載賦值運算子

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

(2)operator= 必須過載為成員函式

(3)過載函式原型為:

類名  &  類名  :: operator= ( 類名 ) ;

例:#include

#include

using namespace std;

class  name

;int main()

三.過載運算子和()

注:(1)運算子 和 () 是二元運算子

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

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

過載格式

型別類 :: operator  ( 型別 ) ;

例:設 x 是類 x 的乙個物件,則表示式

x [ y ]

可被解釋為

x . operator [ ] ( y )

2.() 運算子用於函式呼叫

過載格式

型別類 :: operator()  ( 參數列  ) ;

例:設 x 是類 x 的乙個物件,則表示式

x ( arg1, arg2, … )

可被解釋為

x . operator () (arg1, arg2, … )

四.過載流插入和流提取運算子

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

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

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

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

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

注: << 和 >> 只能被過載為友元函式

心得:運算子過載是針對新型別資料的實際需要對原有運算子進行的適當的改造,過載的功能應當與原有功能相類似,避免沒有目的地使用過載運算子。運算子過載不能改變該運算子用於內部型別物件的含義。它只能和使用者自定義型別的物件一起使用,或者用於使用者自定義型別的物件和內部型別的物件混合使用時。

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

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

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

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

運算子過載

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