過載運算子

2021-10-21 20:05:33 字數 2044 閱讀 9948

#include

#include

using

namespace std;

class

a//拷貝建構函式a(

const a& other)

//運算子過載

a&operator+(

const

int num)

intget_number()

const

private

:int number;};

intmain

(void

)

#include

#include

using

namespace std;

class

a//拷貝建構函式a(

const a& other)

//使用友元運算子過載

friend a&

operator

+(a& other,

int num)

;int

get_number()

const

private

:int number;};

a&operator

+(a& other,

int num)

intmain

(void

)

區別:

\1. 使用成員函式來實現運算子過載時,少寫乙個引數,因為第乙個引數就是this指標。

兩種方式的選擇:

\1. 一般情況下,單目運算子過載,使用成員函式進行過載更方便(不用寫引數)

\2. 一般情況下,雙目運算子過載,使用友元函式更直觀

方便實現a+b和b+a相同的效果,成員函式方式無法實現。

例如: 100 + cow; 只能通過友元函式來實現

cow +100; 友元函式和成員函式都可以實現

特殊情況:

(1) = () [ ] -> 不能過載為類的友元函式!!!(否則可能和c++的其他規則矛盾),只能使用成員函式形式進行過載。

(2)如果運算子的第乙個運算元要求使用隱式型別轉換,則必須為友元函式(成員函式方式的第乙個引數是this指標)

注意:同乙個運算子過載, 不能同時使用兩種方式來過載,會導致編譯器不知道選擇哪乙個(二義性)

\1. 為了防止對標準型別進行運算子過載,

c++規定過載運算子的操作物件至少有乙個不是標準型別,而是使用者自定義的型別

比如不能過載 1+2

但是可以過載 cow + 2 和 2 + cow // cow是自定義的物件

2.不能改變原運算子的語法規則, 比如不能把雙目運算子過載為單目運算

\3. 不能改變原運算子的優先順序

\4. 不能建立新的運算子,比如 operator**就是非法的, operator*是可以的

\5. 不能對以下這四種運算子,使用友元函式進行過載

= 賦值運算子,()函式呼叫運算子,[ ]下標運算子,->通過指標訪問類成員

\6. 不能對禁止過載的運算子進行過載

*不能被過載的運算子*

成員訪問

.域運算

::記憶體長度運算

sizeof

三目運算

? : :

預處理#

可以被過載的運算子

雙目運算子

+ - * / %

關係運算子

== != < <= > >=

邏輯運算子

&& || !

單目運算子

+(正號) -(負號) *(指標) &(取位址) ++ –

位運算& | ~ ^ <<(左移) >>(右移)

賦值運算子

= += -= *= /= %= &= |= ^= <<= >>=

記憶體分配

new delete new[ ] delete[ ]

其他( ) 函式呼叫-> 成員訪問 [ ] 下標, 逗號

過載運算子

題目描述 定義乙個矩形類,資料成員包括左下角和右上角座標,定義的成員函式包括必要的建構函式 輸入座標的函式,實現矩形加法,以及計算並輸出矩形面積的函式。要求使用提示中給出的測試函式並不得改動。兩個矩形相加的規則是 決定矩形的對應座標分別相加,如 左下角 1,2 右上角 3,4 的矩形,與 左下角 2...

過載運算子

include include using namespace std class test test const int a v a test const test t1 v t1.v 以下過載小於號 比較兩個物件的大小 bool operator const test t1 const 比較物件...

過載運算子

1.當乙個過載的運算子是成員函式時,this繫結到左側運算物件。成員運算子函式的引數比運算物件的數量少乙個。非成員函式呼叫等價於 data1 data2 普通表示式 operator data1,data2 等價的函式呼叫成員函式呼叫等價於 data1 data2 普通表示式 data1.opera...