過載運算子作為成員函式還是非成員函式

2022-09-05 19:51:10 字數 536 閱讀 1304

一、定義為成員函式的運算子

1. 賦值、呼叫、下標、成員訪問箭頭運算子(=、()、、->)

2. 改變物件狀態的運算子或者與給定型別密切相關的運算子(遞增++、遞減--、解引用*)

3. 復合賦值運算子(注:它也可以定義為非成員函式)

二、定義為非成員函式的運算子

1. 具有對稱性的,即能轉換任意一端的運算物件的運算子(算術、相等性、關係、位運算子)

2. 輸入輸出運算子

三、為什麼一定要定義為成員函式

把運算子定義為成員函式時,該運算子的左側運算物件必須是運算子所屬類的乙個物件。

如:

string s;

// 賦值運算子=是string的成員函式

s = "world"; // 正確

"world" = s; // 錯誤

將過載運算子定義為成員函式還是普通的非成員函式

賦值 下標 呼叫 和成員訪問箭頭 必須是成員函式 復合賦值運算子應該是成員,但是並非必須 改變物件狀態的運算子或者與給定型別密切相關的運算子,如 遞增 遞減和解引用運算子應該 是成員 具有對稱性的運算子可能轉換任一端的運算物件,例如算數 相等性 關係和位運算子等,因此通常應該是普通的非成員函式。舉例...

C 成員函式過載運算子

include using namespace std class fraction const fraction operator const fraction other 過載運算子 使用fraction operator const fraction other 執行結果一致 說明在過載運算子...

C 非成員函式實現運算子 過載

非成員函式實現運算子過載可以實現運算子前後都可以隱式轉換成所需的型別進行計算,如 fraction d a 2 根據a的型別,將2隱式轉換為fraction型別 fraction e 2 a 當類具有獲取參與運算子過載運算的必要私有資料介面時,使用非友元非成員函式。include using nam...