




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第5章 多 態(tài)面向?qū)ο蟪绦蛟O(shè)計的基本特征之一:多 態(tài)什么是多態(tài)?字面意思:多種形態(tài)例:鉛筆移動,杯子移動,房子移動移動操作(函數(shù))具有多態(tài)性C+含義:多態(tài)性是針對函數(shù)來說的,函數(shù)的執(zhí)行是在運(yùn)行時才動態(tài) 綁定到函數(shù)的入口地址。p對象-移動( );其p對象是基類型,運(yùn)行時偵測實(shí)際類型確定調(diào)用函數(shù)(運(yùn)行時才知道)! 如果 對象是鉛筆: p對象-鉛筆:移動( );如果 對象是杯子: p對象-杯子:移動( );其移動( )函數(shù)具有多態(tài)性,移動( )函數(shù)是虛函數(shù)。面向?qū)ο蟮亩鄳B(tài)性不但使程序結(jié)構(gòu)更接近現(xiàn)實(shí)世界,且使開發(fā)可互操作的組件成為可能. Ex5_1實(shí)現(xiàn)的語法規(guī)則:例:繪圖軟件系統(tǒng)中的設(shè)計 重畫抽象基類
2、虛函數(shù) draw5.1.1 C+多態(tài)的前提條件必須存在一個類的繼承體系。多態(tài)性的函數(shù)是體系中類的成員函數(shù),且通過關(guān)鍵字virtual修飾,稱為虛函數(shù)。虛函數(shù)的多態(tài)調(diào)用是通過基類對象引用或指針。語法:class virtual ;class : public virtual ;/基類的成員函數(shù)顯式聲明為虛函數(shù),派生類相應(yīng)的成員函數(shù)沒有顯式聲明也自動成為虛函數(shù)。void xFunc (基類名 *pObj) pObj- virtualFunction( );Ex5_1 比較virtual的作用5.1 運(yùn)行期綁定、編譯期綁定編譯期綁定:在編譯期就確定了函數(shù)調(diào)用的入口地址。運(yùn)行期綁定:在編譯期并沒有確定
3、了函數(shù)調(diào)用的入口地址,而是在程序運(yùn)行時。問題:怎樣才能找到所運(yùn)行的函數(shù)入口地址?根據(jù)什么?答:系統(tǒng)對各個虛函數(shù)建有入口地址表,在運(yùn)行時根據(jù)this指針查找相應(yīng)的入口地址。面向?qū)ο蟮念悗斓捏w系結(jié)構(gòu)class Bpublic:virtual void OnDraw()coutB:m()endl;void Run()if( getMsg()=WM_PAINT)OnDraw();/.;class D : public Bpublic:virtual void OnDraw()coutD:m()vtbl.vm(); p-m();void Func( BC *p) p-vm();/哪個m()? p-m()
4、;/哪個m()?多態(tài)性的運(yùn)行開銷比較: 虛表占用的內(nèi)存,訪問虛表.但顯然開銷大不了多少.bvtblbvtbldstruct Vtbl void (*vm)(); &BC:vm&DC:vm內(nèi)存映射:5.1.4 構(gòu)造函數(shù)與析構(gòu)函數(shù)構(gòu)造函數(shù)不能是虛函數(shù)。析構(gòu)函數(shù)可以是虛函數(shù)?;惖奈鰳?gòu)函數(shù)聲明為虛函數(shù)那么也自動為虛函數(shù)(為清晰,最好還是用virtual顯式修飾。)5.1.6 靜態(tài)成員函數(shù),頂層函數(shù)不可能是虛函數(shù)(因沒有this指針)5.3 重載、覆蓋、遮蔽各種函數(shù)重名的情況:1)頂層函數(shù)2)在一個類中3)基類與派生類中4)不同的基類中5)不同的派生類中5.3.1重載函數(shù)同名,但具有不同的函數(shù)簽名。5
5、.3.3 遮蔽派生類中的函數(shù),遮蔽基類的同名非虛函數(shù),即使是不同簽名。(即基類派生類間的重載失效.)5.3.2 覆蓋(override )派生類中的函數(shù),覆蓋基類的相同簽名虛函數(shù),動態(tài)綁定,多態(tài)性。5.2 示例程序:影片管理系統(tǒng)菜單:1.Open2.Add Data1)type (Film/DirectorCut/ForeignFilm)2)info3.Output Data4.Save5.Quit5.4 抽象基類5.4.1 純虛成員函數(shù)class Apublic:virtual int Func(int a) = 0 ;注意:沒有實(shí)現(xiàn)部分.5.4.2抽象類含有純虛成員函數(shù)的類。抽象類作為基類
6、使用。抽象類不能實(shí)例化。例: A a; X抽象基類作用:使用虛成員函數(shù)是為了多態(tài)性,為了使類體系具有一致的用戶接口,但對于頂層的基類,可能是高度抽象,沒有實(shí)際的代碼可寫,于是使用虛成員函數(shù),可節(jié)省內(nèi)存,可使各種組件的互操作成為可能。例:微軟的組件對象模型COM的基礎(chǔ)struct IUnknownvirtual LONG QueryInterface(REFIID iid, void * ppvObject )=0;virtual ULONG AddRef(void)=0;virtual ULONG Release(void)=0; Ex5_45.5 運(yùn)行期類型識別5.5.3 類型轉(zhuǎn)換1.強(qiáng)制轉(zhuǎn)
7、換 2. static_cast 3. dynamic_cast例:BC *pbc=new DC;DC *pdc= (DC*)pbc; /1DC *pdc= static_cast(pbc); /2DC *pdc= dynamic_cast(pbc); /3DC &dc= (DC&)(*pbc); /1DC &dc= static_cast(*pbc); /2DC &dc= dynamic_cast(*pbc); /3區(qū)別:若轉(zhuǎn)換不成功, dynamic_cast的結(jié)果為NULL(0),且只能用于多態(tài)性類型能動態(tài)類型識別5.5.4 typeid操作符格式typeid(表達(dá)式)=typeid(類
8、型)例:class BC virtual void m();class DC : public BC ; BC *p=new DC; int x=5;typeid( x) = typeid (int ) / truetypeid( p) = typeid (BC *) / truetypeid( p) = typeid (DC *) / false typeid( *p) = typeid (BC) / falsetypeid( *p) = typeid (DC) / true注意:基類必須有虛函數(shù),上面才對。VC+ 6.0 面向?qū)ο蟪绦蛟O(shè)計方法小結(jié)組合: 組合了其它對象class Window Button bn; ;優(yōu)點(diǎn):封裝性好 , 專注于一項(xiàng)任務(wù). 缺點(diǎn):系統(tǒng)中的對象可能過多 繼承:繼承基類,擴(kuò)展改變基類class Circle : public Point;優(yōu)點(diǎn):容易進(jìn)行新的實(shí)現(xiàn),因?yàn)槠浯蠖鄶?shù)可繼承而來。缺點(diǎn) :破壞了封裝性,當(dāng)父類的實(shí)現(xiàn)更改時,子類也不得不隨之
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高中語文文學(xué)作品賞析計劃
- 牦牛撞死協(xié)議書
- 基于項(xiàng)目的歷史教學(xué)計劃
- 2025年化工廠安全生產(chǎn)工作計劃
- 班主任溝通技巧與家校合作培訓(xùn)計劃
- 2025年中國沖茶壺市場現(xiàn)狀分析及前景預(yù)測報告
- 2025-2030年中國化妝品OEM(ODM)行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025-2030年中國分條整經(jīng)機(jī)行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025-2030年中國冷刨行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025-2030年中國健身咨詢行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 抖音本地生活商家直播培訓(xùn)
- 新版高中物理必做實(shí)驗(yàn)?zāi)夸浖捌鞑?(電子版)
- (正式版)QC∕T 625-2024 汽車用涂鍍層和化學(xué)處理層
- 河南省鄭州市新鄭市2023-2024學(xué)年八年級下學(xué)期期末英語試題(無答案)
- 2023北京順義區(qū)招錄鄉(xiāng)村振興協(xié)理員及考察筆試歷年典型考題及考點(diǎn)剖析附答案帶詳解
- 中國慢性冠脈綜合征患者診斷及管理指南2024版解讀
- 跟著音樂游中國智慧樹知到期末考試答案章節(jié)答案2024年廣州大學(xué)
- 傳統(tǒng)文化醒獅模板
- 小區(qū)彩鋼棚頂維修合同范本
- 藍(lán)色海洋智慧樹知到期末考試答案章節(jié)答案2024年大連海洋大學(xué)
- 教科版四年級上冊科學(xué)第一單元《聲音》測試卷附答案(精練)
評論
0/150
提交評論