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