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