注意事項:
1.除了類屬關系運算符"."、成員指針運算符".*"、作用域運算符"::"、sizeof運算符和三目運算符"?:"以外,
C++中的所有運算符都可以重載。
2.重載運算符限制在C++語言中已有的運算符范圍內的允許重載的運算符之中,不能創建新的運算符。
3.運算符重載實質上是函數重載,因此編譯程序對運算符重載的選擇,遵循函數重載的選擇原則。
4.重載之后的運算符不能改變運算符的優先級和結合性,也不能改變運算符操作數的個數及語法結構。
5.運算符重載不能改變該運算符用於內部類型對象的含義。它只能和用戶自定義類型的對象一起使用,
或者用於用戶自定義類型的對象和內部類型的對象混合使用時。
6.運算符重載是針對新類型數據的實際需要對原有運算符進行的適當的改造,重載的功能應當與原有功能相類似,
避免沒有目的地使用重載運算符。
例:下列關於運算符重載的描述中,( B )是正確的。
A :運算符重載可以改變運算數的個數。
B :運算符重載可以改變優先級。
C :運算符重載可以改變結合性。
D :運算符重載不能改變語法結構。
例:如果表達式++i*k中的“++”和“*”都是重載的友元運算符,則采用運算符函數調用格式,該表達式還可表示為( B )。
A :operator*(i.operator++(),k)
B :operator*(operator++(i),k)
C :i. operator++().operator*(k)
D :k.operator*(operator++(i))
例:在下列成對的表達式中,運算符“+”的意義不相同的一對是( C )。
A :5.0+2.0 和 5.0+2
B : 5.0+2.0和 5+2.0
C :5.0+2.0 和 5+2
D : 5+2.0 和 5.0+2
解:A 中是double + double, 后者雖然是double + int, 但是系統會將2轉換為double類型的2.0,所以還是double + double
B 同理
C左邊是double+double右邊是int +int
D都是double + double
所以應該選C
例:下列關於運算符重載的敘述中,正確的是
A.通過運算符重載,可以定義新的運算符
B.有的運算符只能作為成員函數重載
C.若重載運算符+,則相應的運算符函數名是+
D.重載一個二元運算符時,必須聲明兩個形參
解:[解析] 運算符重載只能重載現有的運算符,不能創建新的運算符。
在重載( )、[ ]、->、=時必須將重載函數聲明為成員函數,而不能聲明為友元函數。
重載二元運算符為成員函數時,該函數只有一個形參,另外一個參數則隱含為本對象自身。
重載的一般形式為: 類型 類名::operator重載運算符(參數列表){……}
重載成員函數與非成員函數以及友元函數 :
重載為成員函數時參數將會被調用,例如是二元運算重載,第一個參數成了調用對象,第二的才是真正的參數
將二元操作符重載為非成員函數時,兩邊參數可以互換,但效率沒重載為成員函數時的高,而且函數內不能直接讀取private成員。
重載為友元函數的話,既可直接訪問private成員,又可以互換參數