C 過載運算子

2021-08-22 19:26:52 字數 2530 閱讀 9237

運算子過載是一種形式的c++多型。

在c++中,編譯器有能力把乙個由資料、物件和操作符共同組成的表示式,解釋為對乙個全域性或成員函式的呼叫。該全域性或成員函式被稱為操作符函式,通過重定義操作符函式,可以實現針對自定義型別(結構,類)的運算法則,並使之與內建型別一樣參與各種表示式。

過載運算子可使**看起來更加自然。

要過載運算子,需使用被稱為運算子函式的特殊函式形式:

operator op (argument-list)
可過載的運算子+

-*/%

^&|~=

!=<

>

+=-=

*=/=

%=^=

&=|=

<<

>>

>>=

<<=

==!=

<=

>=

&&||++–

,->*

->

( )[ ]

newdelete

new[ ]

delete[ ]

操作符的分類

運算子過載有兩種方法:

一種是在類中以成員函式定義,則對於單目運算子來說由於類中會預設提供this指標,所以不需要其他引數;第二種是以全域性函式實現,則由於沒有this指標,需要有類作為形參。

設有這樣乙個類

class number

number(int x,int y):x(x),y(y)

~number()

};

作為成員函式時:
number& operator ++/-- (void)

number operator ++/-- (int)//int為虛參

作為全域性函式時:

可能會訪問到引數的私有成員,解決方法:

友元的宣告:

friend number& operator ++ (number &num);//前++

friend number operator ++ (number &num,int);//後++

前++/–

number&

operator++

/--(number&

num)//+

+i

後++/–

number

operator++

/--(number

&num,int)//int(虛參)用於區分前++

/--和後

++/-

-

作為成員函式
number operator /+-*%|^& (number & that)

注意:原物件的值不變,需要產生乙個臨時的物件儲存值來傳遞

bool

operator > < >= <= == != || && (number & that)

判斷運算子,返回bool值

number & operator += -= *= /= (number& that)

會改變自身的值,應該返回類引用.

全域性函式

number operator + (number& a,number& b)

同樣也需要宣告為友元函式。

輸入、輸出運算子不能過載為成員函式,只能是友元。

//輸出

ostream& operator

<< (ostream& os,number & num)

//輸入

istream& operator >> (istream& is,number & num)

//過載後就可以通過下面語句直接輸入輸出

number n1;

cin >> n1;

cout

<< n1 << endl;

1、不能過載的運算子

:: (作用域限定符)

. (成員訪問運算子)

*(成員指標解引用)

?: (三目運算子)

sizeof (位元組長度運算子)

typeid (型別資訊操作符)

2、運算子的過載改變不了運算子的優先順序

3、無法改變運算子的操作個數

4、無法發明新的運算子

5、過載運算子要注意運算子的一致性,不要改變運算子預設的運算規則

6、運算子的過載是為了方便使用、增強可讀。

C 過載運算子

本文主要講述加號運算子 自增運算子 流提取運算子運 流插入運算子 先給出vector類 class vector 建構函式 vector const vector v 拷貝建構函式 vector operator const vector v 過載 vector operator 過載前置自增運算子...

C 過載運算子

過載的運算子是帶有特殊名稱的函式,函式名是由關鍵字 operator 和其後要過載的運算子符號構成的。與其他函式一樣,過載運算子有乙個返回型別和乙個引數列表。如果我們定義的函式為類的成員函式 box operator const box 如果我們定義的函式為非成員函式,那麼我們需要為每次操作傳遞兩個...

C 過載運算子

1.過載運算子的函式一般格式 函式型別 operator 運算子名稱 形參表 2.過載運算子規則 1 c 不允許使用者自己定義新的運算子,只能對已有的c 運算子進行過載。2 除了類屬關係運算子 成員指標運算子 作用域運算子 sizeof運算子和三目運算子 以外,c 中的所有運算子都可以過載。3 過載...