所謂運算子過載,就是讓運算子有特殊的含義。
傳統的運算子包括但不限於以下幾種:
1算術運算子(+,-,,/,%,++,–);
2邏輯運算子(&&,||,!)
3關係運算子(==,!=,>=,<=,>,<)
4賦值運算子(=,+=,-=,=,/=,%=,>>=,<<=,&=,|=,^=)注意沒有~=
5位運算子(&,|,^,~,<<,>>)
6雜項運算子(包括取位址符號&,解引用符號*,三目運算子?:,sizeof()取變數大小操作符)
運算子過載的本質,也是一種函式,區別是這種函式定義時候需要使用operator關鍵字進行修飾。它既可以作為類的成員函式,也可以作為非成員函式。
運算子過載函式的定義如下:
以+的過載為例
#include
class
money
void
setmoney
(double money)
money operator+(
const money& m)
private
:double money;
}
以上就是乙個被定義為類的成員函式的操作符過載。
過載運算子還是有很多限制條件的,比如說:
1.不能過載沒有的運算子,比如你自創乙個**,這個運算子是不可以過載的。
2.過載的運算子必須與原來的運算子在優先順序方面,結合性方面,還有運算元數目方面必須保持一致。
3.過載運算子的運算元中至少有乙個是自定義型別,如對int+int這個+運算子的過載是不被允許的。
運算子也不是所有的都可以過載的,下面就列舉出六種不能被過載的運算子:
1成員訪問運算子.
2成員指標訪問運算子.*,
->
*3域運算子::
4sizeof長度運算子
5#預處理運算子6?
:條件運算子
C 運算子過載的注意事項
1 過載操作符沒必要一定是成員函式,還可以是友元函式。2 過載操作符函式為成員函式主要是你需要操作類內部的成員,必須是成員函式或友元函式才行。3 至於由深淺拷貝的原因要使其成為成員函式,這個不知道。4 如果運算子被過載為全域性函式,那麼只有乙個引數的運算子叫做一元運算子,有兩個引數的運算子叫做二元運...
運算子過載的注意事項
在 c 中進行運算子過載時的注意事項 c 規定,運算子過載不改變運算子的優先順序。以下運算子不能被過載 sizeof 過載運算子 賦值運算子 和型別強制轉換運算子 時,只能將它們過載為成員函式,不能過載為全域性函式。必要時需要過載賦值運算子 即進行深拷貝,以避免兩個物件內部的指標指向同一片儲存空間。...
過載運算子的形式和注意事項
運算子過載 函式過載 是c 多型的重要實現手段之一。通過運算子過載對運算子功能進行特殊定製,使其支援特定型別物件的運算,執行特定的功能,增強c 的擴充套件功能。1 不可臆造運算子。2 運算子原有運算元的個數 優先順序和結合性不能改變。3 運算元中至少乙個是自定義型別。4 保持過載運算子的自然含義。一...