查看匯總:2014年計算機二級C++考點歸納
8.1 運算符函數(shù)據(jù)與運算符重載
運算符重載是計算機語言固有多態(tài)性的體現(xiàn),是構(gòu)成計算機語言的基礎(chǔ)之一。
C++把重載的運算符視為特殊的函數(shù),稱為運算符函數(shù)。運算符重載就是函數(shù)重載的一種特殊情況。像對待一般重載函數(shù)一樣,編譯系統(tǒng)能夠依據(jù)使用運算符的不同環(huán)境,即參數(shù)(操作數(shù))的數(shù)量或類型的差異,區(qū)分同一運算符的不同含義。
“運算符重載”是針對C++中原有運算符進行的,不可能通過重載創(chuàng)造出新的運算符。除了.、.*、->*、::、?:這五個運算符外,其他運算符都可以重載。由于很多符號是一元運算符和二元運算符公用的,為了避免含混,不得為重載的運算符函數(shù)設(shè)置默認值,調(diào)用時也就不得省略實參。
除了new和delete這兩個較為特殊運算符以外,任何運算符如果作為成員函數(shù)重載時不得重載為靜態(tài)函數(shù)。=、[ ]、()、->以及所有的類型轉(zhuǎn)換運算符只能作為成員函數(shù)重載,而且不能是針對枚舉類型操作數(shù)的重載。
運算符函數(shù)的函數(shù)名是由運算符前加關(guān)鍵字operator構(gòu)成的,在聲明運算符或調(diào)用運算符時都可以用這個名稱。
8.2 典范運算符的重載
1關(guān)于分?jǐn)?shù)類fraction
fraction的聲明和定義包含在頭文件fraction.h和程序文件fraction.cpp中。
一個標(biāo)準(zhǔn)的用fraction表示的分?jǐn)?shù)須滿足以下復(fù)印件:
、俜帜赣肋h為正,分?jǐn)?shù)和符號用分子表示;
、诜肿臃帜富ベ|(zhì),即總表示為最簡分?jǐn)?shù)。
fraction通過兩個私有數(shù)據(jù)成員num和den分別保存分子和分母,并在必要時調(diào)用standardize函數(shù)進行標(biāo)準(zhǔn)化處理,以使num和den的值滿足標(biāo)準(zhǔn)分?jǐn)?shù)的條件。gcd是求兩個整數(shù)的最大公約數(shù)的函數(shù),standardize在化簡分?jǐn)?shù)時要調(diào)用它。
2重載取負運算符“-”
因為fraction用分子的符號代表整個分?jǐn)?shù)的符號,因此所謂“取負”只需對分子num取負就可以了。由于取負運算符“-”是一元運算符,當(dāng)作為成員函數(shù)重載時參數(shù)表中沒有參數(shù),那個唯一的操作數(shù)以this指針的形式隱藏在參數(shù)表中。為此,只需要在fraction.h的類聲明中增加:
fraction poerator -()const { return fraction(-num,den);}
就可以了。由于在類聲明中直接給出了完整定義,因此是一個inline函數(shù)。
“-”是一個典型的一元運算符,除++、--外的其他一元運算符的重載都可以參考這里描述的方法。
3重載加法運算符“+”
“ +”是一個二元運算符,因此作為成員函數(shù)重載時參數(shù)表中只有一個參數(shù),對應(yīng)于第二操作數(shù),而第一操作數(shù)就是對象本身,僅以this指針的形式隱藏在參靈敏表中。
“+”是一個典型的二元運算符,除賦值類運算符外的其他二元運算符的重載都可以參考這里描述的方法。
編輯推薦:
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |