首頁 考試吧論壇 Exam8視線 考試商城 網絡課程 模擬考試 考友錄 實用文檔 求職招聘 論文下載 | ||
![]() |
2011中考 | 2011高考 | 2012考研 | 考研培訓 | 在職研 | 自學考試 | 成人高考 | 法律碩士 | MBA考試 MPA考試 | 中科院 |
|
![]() |
四六級 | 職稱英語 | 商務英語 | 公共英語 | 托福 | 雅思 | 專四專八 | 口譯筆譯 | 博思 | GRE GMAT 新概念英語 | 成人英語三級 | 申碩英語 | 攻碩英語 | 職稱日語 | 日語學習 | 法語 | 德語 | 韓語 |
|
![]() |
計算機等級考試 | 軟件水平考試 | 職稱計算機 | 微軟認證 | 思科認證 | Oracle認證 | Linux認證 華為認證 | Java認證 |
|
![]() |
公務員 | 報關員 | 銀行從業資格 | 證券從業資格 | 期貨從業資格 | 司法考試 | 法律顧問 | 導游資格 報檢員 | 教師資格 | 社會工作者 | 外銷員 | 國際商務師 | 跟單員 | 單證員 | 物流師 | 價格鑒證師 人力資源 | 管理咨詢師考試 | 秘書資格 | 心理咨詢師考試 | 出版專業資格 | 廣告師職業水平 駕駛員 | 網絡編輯 |
|
![]() |
衛生資格 | 執業醫師 | 執業藥師 | 執業護士 | |
![]() |
會計從業資格考試(會計證) | 經濟師 | 會計職稱 | 注冊會計師 | 審計師 | 注冊稅務師 注冊資產評估師 | 高級會計師 | ACCA | 統計師 | 精算師 | 理財規劃師 | 國際內審師 |
|
![]() |
一級建造師 | 二級建造師 | 造價工程師 | 造價員 | 咨詢工程師 | 監理工程師 | 安全工程師 質量工程師 | 物業管理師 | 招標師 | 結構工程師 | 建筑師 | 房地產估價師 | 土地估價師 | 巖土師 設備監理師 | 房地產經紀人 | 投資項目管理師 | 土地登記代理人 | 環境影響評價師 | 環保工程師 城市規劃師 | 公路監理師 | 公路造價師 | 安全評價師 | 電氣工程師 | 注冊測繪師 | 注冊計量師 |
|
![]() |
繽紛校園 | 實用文檔 | 英語學習 | 作文大全 | 求職招聘 | 論文下載 | 訪談 | 游戲 |
第8章 運算符重載
【考點一】 運算符函數據與運算符重載
運算符重載是計算機語言固有多態性的體現,是構成計算機語言的基礎之一。C++把重載的運算符視為特殊的函數,稱為運算符函數。運算符重載就是函數重載的一種特殊情況。像對待一般重載函數一樣,編譯系統能夠依據使用運算符的不同環境,即參數(操作數)的數量或類型的差異,區分同一運算符的不同含義。"運算符重載"是針對C++中原有運算符進行的,不可能通過重載創造出新的運算符。除了.、.*、->*、::、?:這五個運算符外,其他運算符都可以重載。由于很多符號是一元運算符和二元運算符公用的,為了避免含混,不得為重載的運算符函數設置默認值,調用時也就不得省略實參。除了new和delete這兩個較為特殊運算符以外,任何運算符如果作為成員函數重載時不得重載為靜態函數。=、[ ]、()、->以及所有的類型轉換運算符只能作為成員函數重載,而且不能是針對枚舉類型操作數的重載。運算符函數的函數名是由運算符前加關鍵字operator構成的,在聲明運算符或調用運算符時都可以用這個名稱。
【考點二】 典范運算符的重載
1.關于分數類fractionfraction的聲明和定義包含在頭文件fraction.h和程序文件fraction.cpp中。一個標準的用fraction表示的分數須滿足以下復印件:①分母永遠為正,分數和符號用分子表示;②分子分母互質,即總表示為最簡分數。fraction通過兩個私有數據成員num和den分別保存分子和分母,并在必要時調用standardize函數進行標準化處理,以使num和den的值滿足標準分數的條件。gcd是求兩個整數的最大公約數的函數,standardize在化簡分數時要調用它。
2.重載取負運算符"-"因為fraction用分子的符號代表整個分數的符號,因此所謂"取負"只需對分子num取負就可以了。由于取負運算符"-"是一元運算符,當作為成員函數重載時參數表中沒有參數,那個唯一的操作數以this指針的形式隱藏在參數表中。為此,只需要在fraction.h的類聲明中增加:fraction poerator -()const { return fraction(-num,den);}就可以了。由于在類聲明中直接給出了完整定義,因此是一個inline函數。"-"是一個典型的一元運算符,除++、--外的其他一元運算符的重載都可以參考這里描述的方法。
3.重載加法運算符"+"" +"是一個二元運算符,因此作為成員函數重載時參數表中只有一個參數,對應于第二操作數,而第一操作數就是對象本身,僅以this指針的形式隱藏在參靈敏表中。"+"是一個典型的二元運算符,除賦值類運算符外的其他二元運算符的重載都可以參考這里描述的方法。
4.重載增1運算符"+ +"+ +既可以是前綴運算符(前增1),又可以是后綴運算符(后增1)。為了區分這兩種情況,重載這兩個運算符時必須在格式上有所區別:重載后綴+ +時必須多一個虛擬參數:int,因此從形式上看像是一個二元運算符重載。
5.重載類型轉換符"long"類型轉換符必須作為成員函數重載。在重載類型轉換符時,由于運算符本身已經表示出返回值類型,因此不需要返回值類型的聲明。一個分數可以看成是由一個整數部分和一個純分數部分組成的,為了取得一個分數的整數部分,可為fraction重載類型轉換符long。為此可在fraction.h的類聲明中增加:opertator long()const { return num/den;}
6.重載賦值運算符"="賦值運算符只能作為成員函數重載。常見的真正需要重載賦值運算符的情況是:類中包含指向動態空間的指針賦值運算符=的重載應注意以下幾點:①返回值聲明為引用,而函數體中總是用語句return *this;返回;②如果參數被聲明為指向同類對象的引用或指針,應判別所指向對象的是否與被賦值對象為同一對象,如果是,立即返回,不做任何賦值處理;③如果被賦值對象占用了動態空間或其他資源,應首先釋放這些資源,以便接收新的資源; ④如果參數被聲明為指針或引用,通常應加上const修飾;⑤如果參數被聲明為指針,應判別是否為空,以便做出特殊處理;⑥一個類如果需要重載運算符=,通常也就需要定義自己特有的拷貝構造函數,反之亦然。
希望與更多計算機等級考試的網友交流,請進入計算機等級考試論壇
更多信息請訪問:考試吧計算機等級考試欄目
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |