過載運算子

2021-08-20 07:15:56 字數 1297 閱讀 5580

operator《運算子符號》(

《參數列》)

}class a}

;a a::

operator+(

a& d)

int main()

aprivate:a;

public:

aoperator+(a&,

a&);a

()=default

;a(int x):

a(x){};a

operator+(

a& c,

a& d)

return

a(c.

a+d.a)

;ab,c,d

; //等價於d=operator+(b,c);

return0;

復合賦值運算子一般來說應該是成員,但並非必須,這一點與賦值運算子略有不同。

改變物件狀態的運算子或者與給定型別密切相關的運算子,如遞增,遞減,和解引用運算子,通常應該是成員。

具有對稱性的運算子可能轉換任意一端的運算物件,例如算術,相等性,關係和位運算子等,因此它們通常應該是普通的非成員函式。

有些運算子可以過載有些不可以過載:

* . , .* , :: , ?: ,siezof

過載運算子注意事項:

(1)為了防止使用者對標準型別進行運算子過載,c++規定過載後的運算子的操作物件必須至少有乙個是使用者定義的型別

這是什麼意思呢?

比如說現在有兩個數:int number1,int number2,

那麼number1+number2 求的是兩個數的和,

但是如果你過載以後讓著兩個數相加為他們的乘積,這肯定是不合乎邏輯的。

可能過載以後會有二義性,導致程式不知道該執行哪乙個(是自帶的的還是過載後的函式)

(2)使用運算子不能違法運算子原來的句法規則。如不能將% 過載為乙個運算元,

例如:int index;

%index;這種是不被允許的。

(3)不能修改運算子原先的優先順序。

(4)不能建立乙個新的運算子,例如不能定義operator** (···)來表示求冪

(5)不能進行過載的運算子:成員運算子,作用域運算子,條件運算子,sizeof運算子,typeid(乙個rtti運算子),const_cast、dynamic_cast、reinterpret_cast、static_cast強制型別轉換運算子

(6)大多數運算子可以通過成員函式和非成員函式進行過載但是下面這四種運算子只能通過成函式進行過載:

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

過載運算子

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