首頁考試吧論壇Exam8視線考試商城網(wǎng)絡課程模擬考試考友錄實用文檔求職招聘論文下載
2014中考
法律碩士
2014高考
MBA考試
2014考研
MPA考試
在職研
中科院
考研培訓 自學考試 成人高考
四 六 級
GRE考試
攻碩英語
零起點日語
職稱英語
口譯筆譯
申碩英語
零起點韓語
商務英語
日語等級
GMAT考試
公共英語
職稱日語
新概念英語
專四專八
博思考試
零起點英語
托福考試
托業(yè)考試
零起點法語
雅思考試
成人英語三級
零起點德語
等級考試
華為認證
水平考試
Java認證
職稱計算機 微軟認證 思科認證 Oracle認證 Linux認證
公 務 員
導游考試
物 流 師
出版資格
單 證 員
報 關(guān) 員
外 銷 員
價格鑒證
網(wǎng)絡編輯
駕 駛 員
報檢員
法律顧問
管理咨詢
企業(yè)培訓
社會工作者
銀行從業(yè)
教師資格
營養(yǎng)師
保險從業(yè)
普 通 話
證券從業(yè)
跟 單 員
秘書資格
電子商務
期貨考試
國際商務
心理咨詢
營 銷 師
司法考試
國際貨運代理人
人力資源管理師
廣告師職業(yè)水平
衛(wèi)生資格 執(zhí)業(yè)醫(yī)師 執(zhí)業(yè)藥師 執(zhí)業(yè)護士
會計從業(yè)資格
基金從業(yè)資格
統(tǒng)計從業(yè)資格
經(jīng)濟師
精算師
統(tǒng)計師
會計職稱
法律顧問
ACCA考試
注冊會計師
資產(chǎn)評估師
審計師考試
高級會計師
注冊稅務師
國際內(nèi)審師
理財規(guī)劃師
美國注冊會計師
一級建造師
安全工程師
設備監(jiān)理師
公路監(jiān)理師
公路造價師
二級建造師
招標師考試
物業(yè)管理師
電氣工程師
建筑師考試
造價工程師
注冊測繪師
質(zhì)量工程師
巖土工程師
造價員考試
注冊計量師
環(huán)保工程師
化工工程師
咨詢工程師
結(jié)構(gòu)工程師
城市規(guī)劃師
材料員考試
監(jiān)理工程師
房地產(chǎn)估價
土地估價師
安全評價師
房地產(chǎn)經(jīng)紀人
投資項目管理師
環(huán)境影響評價師
土地登記代理人
繽紛校園 實用文檔 英語學習 作文大全 求職招聘 論文下載 訪談|游戲
計算機等級考試
您現(xiàn)在的位置: 考試吧 > 計算機等級考試 > 計算機二級考試 > C加加 > 復習資料 > 正文

2014年計算機二級C++考點歸納:繼承與派生

  7.4 子類型關(guān)系

  公有繼承時,派生類的對象可以作為基類的對象處理,派生類是基類的子類型。

  子類型關(guān)系使得在需要基類對象的任何地方都可以使用公有派生類的對象來替代,從而可以使用相同的函數(shù)統(tǒng)一處理基類對象和公有派生類對象(形參為基類對象時,實參可以是派生類對象),而不必為每一個類設計單獨的處理程序,大大提高了程序的效率。它是實現(xiàn)多態(tài)性的重要基礎(chǔ)之一。

  子類型關(guān)系的定義如下:

  有一個特定的類型S,當且僅當它提供了類型T的行為時,稱類型S是類型T的子類型。

  公有派生類的對象可以賦值給基類的對象。實際上不僅如此,具有子類型關(guān)系的基類和派生類的對象之間滿足如下賦值兼容規(guī)則:

  (1)公有派生類的對象可以賦值給基類的對象,即用公有派生類對象中從基類繼承來的成員,逐個賦值給基類對象的成員。

  (2)公有派生類的對象可以初始化基類的引用。

  (3)公有派生類的對象的地址可以賦值給指向基類的指針。

  7.5 虛函數(shù)與多態(tài)性

  1多態(tài)性的概念

  一個面向?qū)ο蟮南到y(tǒng)常常要求一組具有相同基本語義的方法能在同一接口下為不同的對象服務,這就是所謂多態(tài)性(polymorphism)。

  在C+ +語言中,多態(tài)性可分為兩類:編譯時的多態(tài)性和運行時的多態(tài)性。

  編譯時的多態(tài)性是通過函數(shù)重載和模板體現(xiàn)的。利用函數(shù)重載機制,在調(diào)用同名的函數(shù)時,編譯系統(tǒng)可根據(jù)實參的具體情況確定所調(diào)用的是同名函數(shù)中的哪一個。利用函數(shù)模板,編譯系統(tǒng)可根據(jù)模板實參以及模板函數(shù)實參的具體情況確定所要調(diào)用的是哪個函數(shù),并生成相應的函數(shù)實例;利用類模板,編譯系統(tǒng)可根據(jù)模板實參的具體情況確定所要定義的是哪個類的對象,并生成相應的類實例。由于有關(guān)操作所針對的具體目標(函數(shù)或類)的確定都是在編譯時完成的,與運行時的動態(tài)環(huán)境無關(guān),“編譯時的多態(tài)性”因此而得名,其實現(xiàn)機制則和為靜態(tài)綁定(static binding,也譯作靜態(tài)聯(lián)編)。函數(shù)重載是“函數(shù)”一章中已經(jīng)學習過的內(nèi)容,但其中沒有包含函數(shù)重載的一種特殊情況:運算符重載。

  2虛函數(shù)

  在成員函數(shù)聲明的前面加上virtual修飾,即把該函數(shù)聲明為虛函數(shù)。虛函數(shù)可以是另一個類的友元函數(shù),但不得是靜態(tài)成員函數(shù)。

  在派生類中可以重新定義從基類繼承下來的虛函數(shù),從而提供該函數(shù)的適用于派生類的專門版本。也可能并不需要重新定義,在這種情況下,繼承下來的虛函數(shù)仍然保持其在基類中的定義,即派生類和基類使用同一函數(shù)版本。除少數(shù)特殊情況外,在派生類中重定義虛函數(shù)時,函數(shù)名、形參表和返回值類型必須保持不變。

  虛函數(shù)在派生類被重定義后,重定義的函數(shù)仍然是一個虛函數(shù),可以在其派生類中再次被重定義。注意,對于虛函數(shù)的重定義函數(shù),無論是否用virtual修飾都是虛函數(shù)。當然,最好不要省略virtual修飾,以免削弱程序的可讀性。

  對虛函數(shù)的調(diào)用有兩種方式:非多態(tài)調(diào)用和多態(tài)調(diào)用。非多態(tài)調(diào)用是指不借助于指針或引用的直接調(diào)用。非多態(tài)調(diào)用總是通過成員訪問運算符 .進行的。與通常的成員函數(shù)調(diào)用類似,非多態(tài)調(diào)用是建立在靜態(tài)綁定機制的基礎(chǔ)之上的,不具備多態(tài)性特征。多態(tài)調(diào)用是指借助于指向基類的指針或引用的調(diào)用。在C+ +中,一個基類指針(或引用)可以用于指向它的派生類對象,而且通過這樣的指針(或引用)調(diào)用虛函數(shù)時,被調(diào)用的是該指針(或引用)實際所指向的對象類的那個重定義版本。

  基類中的實函數(shù)也可以在派生類中重定義,但重定義的函數(shù)仍然是實函數(shù)。在實函數(shù)的情況下,通過基類指針(或引用)所調(diào)用的只能是基類的那個函數(shù)版本,無法調(diào)用到派生類中的重定義函數(shù)。也就是說,盡管調(diào)用的語法形式可能是相同的,但對實函數(shù)的任何形式的調(diào)用都是非多態(tài)的。注意,無論是虛函數(shù)還是實函數(shù),在派生類中被重定義后,原來的函數(shù)版本即被隱藏,在通過成員訪問運算符 .直接調(diào)用該函數(shù)時,所調(diào)用的是重定義版本。但原來的版本依然存在,仍然可以通過在函數(shù)名前加域修飾(即:<類名>::)來調(diào)用它們。

  3虛析構(gòu)函數(shù)

  析構(gòu)函數(shù)也可以通過virtual修飾而聲明為虛函數(shù)。虛析構(gòu)函數(shù)與一般虛函數(shù)的不同之處在于:

  (1)重定義函數(shù)就是派生類的析構(gòu)函數(shù),不要求同名。

  (2)一個虛析構(gòu)函數(shù)的版本被調(diào)用執(zhí)行后,接著就要調(diào)用執(zhí)行基類版本,依次類推,直到調(diào)用執(zhí)行了派生序列的最開始的那個虛析構(gòu)函數(shù)版本為止。

  通常,只要派生類中包含有虛函數(shù)的重定義(從而有可能被多態(tài)調(diào)用),而且對析函數(shù)進行了專門的聲明(而不是不做任何聲明,從而采用默認的析構(gòu)函數(shù)),其基類的析構(gòu)函數(shù)就應當聲明為虛函數(shù),否則就可能出問題。

  4純虛函數(shù)與抽象類

  在某些情況下,基類無法確定(或無法完全確定)一個虛函數(shù)的具體操作方式或內(nèi)容,只能靠派生類來提供各個具體的實現(xiàn)版本;愔械倪@種必須靠派生類提供重定義版本的虛函數(shù)稱為純虛函數(shù)。為了將一個虛函數(shù)聲明為純虛函數(shù),需要在虛函數(shù)原形的語句結(jié)束符 ;之前加上=0。

  擁有純虛函數(shù)的類稱為抽象類,抽象類不能用來定義對象。如果一抽象類的派生類沒有重定義來自基類的某個純虛函數(shù),則該函數(shù)在派生類中仍然是純虛函數(shù),這就使得該派生類也成為抽象類。也就是說,一個派生類可以把重定義純虛函數(shù)的任務進一步轉(zhuǎn)交給它自己的派生類。

  可以在將一個函數(shù)聲明為純虛函數(shù)的同時,為該函數(shù)提供實現(xiàn)版本。換句話說,一個函數(shù)是否為純虛函數(shù),取決于其原形的尾部是否為“=0”,與實現(xiàn)版本的有無沒有什么關(guān)系。擁有實現(xiàn)版本的純虛函數(shù)仍然有賴于派生類提供重定義版本。純虛函數(shù)的實現(xiàn)版本通常是不完善的版本,但包含了一些共有操作,供各個派生類在重定義函數(shù)中調(diào)用。派生類在重定義一個純虛函數(shù)時,可以繼續(xù)將之聲明為純虛函數(shù)。另外,純虛函數(shù)不得聲明為內(nèi)聯(lián)函數(shù)。

 

 

 

上一頁  1 2 3 4 5  下一頁

編輯推薦:

2014年上半年計算機等級考試報名時間預告

2014年計算機等級考試考試時間預測

2013年9月計算機等級考試成績查詢時間及方式預告

文章責編:wuchong  
看了本文的網(wǎng)友還看了
文章搜索
版權(quán)聲明:如果計算機等級考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請與我們聯(lián)系800@exam8.com,我們將會及時處理。如轉(zhuǎn)載本計算機等級考試網(wǎng)內(nèi)容,請注明出處。