一、操作符函式
在c++中,編譯器有能力把乙個由資料、物件和操作符共同組成的表示式,解釋為對乙個全域性或成員函式的呼叫。
這種全域性或成員函式就被稱為操作符函式,通過重定義操作符函式,可以實現針對對自定義型別的運算法則,並使之與內建型別一樣去參與各種的表示式。
二、雙目操作符表示式
成員函式
形如l#r雙目操作符表示式,將被編譯器解釋為 l.operator#(r)
a-b+c == a.operator-(b).operator+(c)
全域性函式
形如l#r的雙目操作符表示式,將被編譯器解釋為 ::operator#(l,r)
a-(b+c) == ::operator-(a,::operator+(b,c))
三、單目操作符表示式
成員函式
形如#o或o#的單目操作表示式,將被編譯器解釋為 o.operator#(),唯一的運算元是呼叫物件。
全域性函式
形如#o或o#的單目操作表示式,將被編譯器解釋為 ::operator#(o),唯一的運算元是呼叫物件。
四、典型的雙目運算子過載
成員函式
point operator /+-*%|^& (point&that)
注意點:這裡的原物件的值不變,需要產生乙個臨時的物件。
booloperator > < >= <= == != || && (point&that)
point& operator += -= *= /= (point&that)
這也是2大類雙目運算子過載形式。注意點是:運算子的過載是要符合情理的。
全域性函式
可能會訪問到引數的私有成員:
1、把成員變成公開,但會破壞類的封閉性。
2、把全域性函式宣告為友元(友元不是成員),
3、不能在友元函式中直接訪問成員變數。
point operator + (point& a,point&b)
五、典型的單目運算子過載
成員函式:
前++/--point& operator ++/-- (void)後++/--point
operator ++/-- (int
)
全域性函式:
前++/--point& operator ++/-- (point&)後++/--point
operator ++/-- (point&,int
)
六、輸入、輸出運算子過載
輸入、輸出運算子不能過載為成員函式。。
ostream& operator<< (ostream& os,point&p)
istream& operator >> (istream& is,point&p)
friend ostream& operator << (ostream& os,point& p);
friend istream& operator >> (istream& is,point& p);
輸入、輸出運算子是需要友元函式宣告的。
七、特殊的運算子的過載
下標運算子,可以把物件當作陣列來使用。
() 函式運算子,可以把物件當作函式來使用。
-> 成員訪問運算子,可以把物件當作指標來使用。
* 解引用運算子,可以把物件當作指標來使用。
new/delete 也可以進行過載,但不建議使用。
new會自動呼叫過載的new函式再建構函式。
delete會先呼叫析構再呼叫過載的delete函式。
八、運算子過載的一些限制
1、不能過載的運算子
:: 作用域限定符
. 成員訪問運算
.* 成員指標解引用
?: 三目運算子
sizeof 位元組長度運算子
typeid 型別資訊操作符
2、運算子的過載改變不了運算子的優先順序
3、無法改變運算子的操作個數
4、無法發明新的運算子
5、過載運算子要注意運算子的一致性
不要改變運算子預設的運算規則
C 運算子 (關係操作符)
現在,讀者已經學會了如何表示資料,接下來我們學習如何處理資料。c語言為處理資料提供了大量的操作,可以在程式中進行算術運算 比較值的大小 修改變數 邏輯的組合等。關係操作符 這類操作符用於測試運算元之間的各種關係。c提供了所有常見的關係操作符。這些操作符是 這些操作符產生的結果都是乙個整型值,而不是布...
C 運算子過載 11 過載 和 操作符
運算子 用於流輸出,而運算子 用於流輸出。在開始過載這些操作符之前,必須注意下面的事項 1 cout是輸出類的物件,而cin是輸入類的物件 2 這些操作符必須過載為全域性函式。如果想要讓它們可以訪問私有成員,則必須定義為友元。為何必須過載為全域性函式?如果操作符過載為乙個成員函式,則它必須是物件的成...
C 運算子過載函式之成員運算子過載函式
5.2.3 成員運算子過載函式 在c 中可以把運算子過載函式定義為某個類的成員函式,稱之為成員運算子過載函式。1.定義成員運算子過載函式的語法形式 1 在類的內部,定義成員運算子過載函式的格式如下 函式型別 operator 運算子 形參表 2 成員運算子過載函式也可以在類中宣告成員函式的原型,在類...