4重載增1運(yùn)算符“+ +”
+ +既可以是前綴運(yùn)算符(前增1),又可以是后綴運(yùn)算符(后增1)。為了區(qū)分這兩種情況,重載這兩個(gè)運(yùn)算符時(shí)必須在格式上有所區(qū)別:重載后綴+ +時(shí)必須多一個(gè)虛擬參數(shù):int,因此從形式上看像是一個(gè)二元運(yùn)算符重載。
5重載類型轉(zhuǎn)換符“l(fā)ong”
類型轉(zhuǎn)換符必須作為成員函數(shù)重載。在重載類型轉(zhuǎn)換符時(shí),由于運(yùn)算符本身已經(jīng)表示出返回值類型,因此不需要返回值類型的聲明。一個(gè)分?jǐn)?shù)可以看成是由一個(gè)整數(shù)部分和一個(gè)純分?jǐn)?shù)部分組成的,為了取得一個(gè)分?jǐn)?shù)的整數(shù)部分,可為fraction重載類型轉(zhuǎn)換符long。為此可在fraction.h的類聲明中增加:
opertator long()const { return num/den;}
6重載賦值運(yùn)算符“=”
賦值運(yùn)算符只能作為成員函數(shù)重載。
常見(jiàn)的真正需要重載賦值運(yùn)算符的情況是:類中包含指向動(dòng)態(tài)空間的指針
賦值運(yùn)算符=的重載應(yīng)注意以下幾點(diǎn):
①返回值聲明為引用,而函數(shù)體中總是用語(yǔ)句return *this;返回;
、谌绻麉(shù)被聲明為指向同類對(duì)象的引用或指針,應(yīng)判別所指向?qū)ο蟮氖欠衽c被賦值對(duì)象為同一對(duì)象,如果是,立即返回,不做任何賦值處理;
③如果被賦值對(duì)象占用了動(dòng)態(tài)空間或其他資源,應(yīng)首先釋放這些資源,以便接收新的資源;
、苋绻麉(shù)被聲明為指針或引用,通常應(yīng)加上const修飾;
⑤如果參數(shù)被聲明為指針,應(yīng)判別是否為空,以便做出特殊處理;
⑥一個(gè)類如果需要重載運(yùn)算符=,通常也就需要定義自己特有的拷貝構(gòu)造函數(shù),反之亦然。
7重載復(fù)合賦值運(yùn)算符“+=”
重載復(fù)合賦值類運(yùn)算符,如+=、-=等,也應(yīng)遵循上述重載賦值運(yùn)算符的注意事項(xiàng)。
與賦值運(yùn)算符不同的是,復(fù)合賦值類運(yùn)算符既可作為成員函數(shù)重載也可作為非成員函數(shù)重載。在后一種情況下,兩個(gè)操作數(shù)都必須出現(xiàn)在參數(shù)表中;為了保持運(yùn)算符原有的特性,第一參數(shù)應(yīng)當(dāng)聲明為引用(否則就無(wú)法改變它的值),返回值也應(yīng)當(dāng)像重載“=”那樣聲明為引用,并在最后將獲得新值的第一參數(shù)返回。
8重載關(guān)系操作符“>”
重載的關(guān)系操作符函數(shù)應(yīng)返回邏輯值。對(duì)于 fraction的兩個(gè)對(duì)象,可以通過(guò)比較通分后的兩個(gè)分子來(lái)確定它們的大小。為此,可在fraction.h的類聲明中增加如下的成員函數(shù)聲明:
bool operator>(fraction f){ return num*f.den>f.num*den;}
其他關(guān)系運(yùn)算符可以參照重載。
9重載下標(biāo)訪問(wèn)運(yùn)算符“[ ]”
運(yùn)算符[ ]只能作為成員函數(shù)重載。
10重載C+ +流運(yùn)算符“”和“”
C+ +流的輸入運(yùn)算符和輸出運(yùn)算符只能作為非類成員函數(shù)重載。在一個(gè)類中,如有必要,可將或聲明為友元函數(shù)。
編輯推薦:
2014年上半年計(jì)算機(jī)等級(jí)考試報(bào)名時(shí)間預(yù)告
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |