8.3 運算符重載應注意的幾個問題
1重載的運算符應保持其原有的基本語義
重載的運算符應該體現(xiàn)為原運算符的功能在新的數(shù)據(jù)類型上的延伸,它的使用應當使程序中算法的表達顯得更流暢、自然,使閱讀程序的人在不借助于其他說明資料的情況下就能夠正確理解。不要讓重載的運算符去勉強承擔那些更適于一般函數(shù)承擔的功能。
2.生載的運算符應盡可能保持基原有的特性
運算符的操作數(shù)個數(shù)、優(yōu)先級和結合性是三個最基本的特性,而且是重載時自然得以保持的特性,因此無須采取專門的措施。需要注意的是下面這些特性。
、偈欠褚蟮谝徊僮鲾(shù)為有左值操作數(shù)。
、谑欠裥薷牡谝徊僮鲾(shù)。
、鄄僮鞯慕Y果是否為有左值數(shù)據(jù)。
④應保證第二操作數(shù)不被改變。
3運算符的重載應當配套
某些運算符之間關系密切,存在著某種邏輯上的聯(lián)系,因此若需要重載其中的某一個,往往就意味著同組的其他運算符也需要重載。
4使用引用參數(shù)還是非引用參數(shù)?
非引用參數(shù)的優(yōu)點是:以傳值方式傳遞參數(shù),形參變量只是實參的副本,對形參變量的修改不會影響實參;在相關對象存在只需一個實參的構造函數(shù)的情況下,可以充分利用表達式處理過程中的自動轉換機制,使表達式顯得更自然。但當對象很大或需要深層復制時,非引用參數(shù)占用的計算機資源較多,影響參數(shù)傳遞的效率。
引用參數(shù)的優(yōu)點是:當對象很大或需要深層復制時,可大大減少對資源的占用,提高參數(shù)傳遞的效率。但無法利用系統(tǒng)的自動轉換機制。
5作為成員函數(shù)重載還是作為非成員函數(shù)重載?
=、[ ]、()、->以及所有的類型轉換運算符只能作為成員函數(shù)重載。如果允許第一操作數(shù)不是同類對象,而是其他數(shù)據(jù)類型,則只能作為非成員函數(shù)重開車(如輸入輸出流運算符和就是這樣的情況)。若希望系統(tǒng)在必要時能夠利用只需一個實參的構造函數(shù)自動對第一操作數(shù)進行轉換,也應將該運算符作為非成員函數(shù)重載;此種情況下,運算符函數(shù)的參數(shù)應該是非引用參數(shù),否則不能達到所希望的效果。其他情況下一般應作為成員函數(shù)重載。
編輯推薦:
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |