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

2021-07-24 00:20:36 字數 472 閱讀 4071

● 賦值 = 、下標[ ]、呼叫( )、和成員訪問箭頭 ->必須是成員函式

● 復合賦值運算子應該是成員,但是並非必須

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

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

舉例:

如果把 + 運算子定義成乙個成員函式,則它左側和右側的運算物件的類必須和運算子同類:

string s = "world";

string t = s + "!"; //正確,可以把 const char* 加到乙個string物件中,operator+()是非成員函式,產生型別轉換

string u = "hi" + s; //如果 operator+() 是 string 的成員函式,則會產生錯誤

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

一 定義為成員函式的運算子 1.賦值 呼叫 下標 成員訪問箭頭運算子 2.改變物件狀態的運算子或者與給定型別密切相關的運算子 遞增 遞減 解引用 3.復合賦值運算子 注 它也可以定義為非成員函式 二 定義為非成員函式的運算子 1.具有對稱性的,即能轉換任意一端的運算物件的運算子 算術 相等性 關係 ...

C 成員函式過載運算子

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

成員函式過載運算子和友元函式過載運算子的比較

1.對雙目 運算子而言,成員 函式過載 運算子的函式引數表中只有乙個引數,而用友元函式過載運算子函式引數表中含有兩個引數。對單木運算子來說,成員函式過載運算子的函式引數表中沒有引數,而用友元函式過載運算子函式引數表中含有乙個函式。這個問題要搞清楚,有乙個this 指標的問題。2.雙目運算子一般可以用...