轉(zhuǎn):
http://www.diybl.com/course/3_program/c++/cppjs/2008611/124644.html一、不可以被重載的操作符
1.域操作符::
2.取成員指針操作符.*
3.成員操作符.
4.選擇操作符?:
二、重載操作符必須有一個類類型操作數(shù)
用于內(nèi)置類型的操作符,其含義不能改變,也不能為內(nèi)置類型定義新的操作符。
三、重載的操作符的優(yōu)先級、結(jié)合性或操作數(shù)數(shù)目都不能改變。除了函數(shù)調(diào)用操作符operator()之外,重載操作符時使用默認實參是非法的。
四、重載操作符并不能保證操作數(shù)的求值順序
邏輯與(&&)、邏輯或(||)經(jīng)重載后沒有短路求值特性
逗號(,)經(jīng)重載后也不保證從左到右依次計算
五、重載操作符可以定義為類成員函數(shù)或普通的非成員函數(shù)
類成員函數(shù)有一隱含的this指針參數(shù)
六、操作符重載為普通非成員函數(shù)時,通常須將其聲明為所操作類的友元。
重載操作符的設(shè)計
1.不要重載具有內(nèi)置含義的操作符
賦值操作符(=)、取地址操作符(&)、逗號操作符(,)對類類型有默認含義:合成的賦值操作符進行逐個成員賦值;取地址操作符返回對象地址;逗號操作符從左到右計算每個表達式的值,并返回最右邊操作數(shù)的值。
2.大多數(shù)操作符對類對象沒有意義
除非提供了了重載定義,賦值操作符(=)、取地址操作符(&)、逗號操作符(,)對類類型操作數(shù)沒有定義。
3.若一個類有算數(shù)操作符或位操作符,則提供相應(yīng)的復(fù)合賦值操作符是好的做法。
4.用作關(guān)聯(lián)容器的健類型的類應(yīng)該定義小于操作符(<);用作順序容器元素類型的類應(yīng)該定義相等操作符(==)、小于操作符(<)
5.選擇成員或非成員實現(xiàn)
(1)賦值操作符(=),下標操作符([]),函數(shù)調(diào)用操作符(()),指針成員訪問箭頭(->)必須重載為類成員函數(shù)。
(2)復(fù)合賦值操作符應(yīng)定義為類成員函數(shù);但定義為非成員函數(shù)也不會出線編譯錯誤。
(3)改變對象狀態(tài)或與給定類型緊密聯(lián)系的操作符應(yīng)定義為類成員。如自增操作符(++)、自減操作符(--)應(yīng)定義為類成員。
(4)對稱的操作符如算術(shù)操作符、相等操作符、關(guān)系操作符和位操作符應(yīng)定義為非成員。
文章出處:
http://www.diybl.com/course/3_program/c++/cppjs/2008611/124644.html