




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第第6章章 多態(tài)性與虛函數(shù)多態(tài)性與虛函數(shù) 6.1 多態(tài)性概述多態(tài)性概述 所謂多態(tài)性就是不同對象收到相同所謂多態(tài)性就是不同對象收到相同的消息時,產(chǎn)生不同的動作。的消息時,產(chǎn)生不同的動作。 直觀地說,多態(tài)性是指用一個名字直觀地說,多態(tài)性是指用一個名字定義不同的函數(shù),這些函數(shù)執(zhí)行不同但定義不同的函數(shù),這些函數(shù)執(zhí)行不同但又類似的操作,從而可以使用相同的調(diào)又類似的操作,從而可以使用相同的調(diào)用方式來調(diào)用這些具有不同功能的同名用方式來調(diào)用這些具有不同功能的同名函數(shù)。函數(shù)。 6.1.1 多態(tài)的分類多態(tài)的分類 C+中的多態(tài)性可以分為四類中的多態(tài)性可以分為四類: 參數(shù)多態(tài)參數(shù)多態(tài) 包含多態(tài)包含多態(tài) 重載多態(tài)重載多
2、態(tài) 強制多態(tài)。強制多態(tài)。 前面兩種統(tǒng)稱為通用多態(tài),而后面兩前面兩種統(tǒng)稱為通用多態(tài),而后面兩種統(tǒng)稱為專用多態(tài)。種統(tǒng)稱為專用多態(tài)。 6.1.2多態(tài)的實現(xiàn)多態(tài)的實現(xiàn) 多態(tài)從實現(xiàn)的角度來講可以劃分為兩類多態(tài)從實現(xiàn)的角度來講可以劃分為兩類:編譯時的多態(tài)編譯時的多態(tài)和和運行時的多態(tài)運行時的多態(tài)。 編譯時的多態(tài)編譯時的多態(tài)是通過靜態(tài)聯(lián)編來實現(xiàn)是通過靜態(tài)聯(lián)編來實現(xiàn)的。靜態(tài)聯(lián)編就是在編譯階段完成的聯(lián)編。的。靜態(tài)聯(lián)編就是在編譯階段完成的聯(lián)編。編譯時多態(tài)性主要是通過函數(shù)重載和運算編譯時多態(tài)性主要是通過函數(shù)重載和運算符重載實現(xiàn)的。符重載實現(xiàn)的。 運行時的多態(tài)運行時的多態(tài)是用動態(tài)聯(lián)編實現(xiàn)的。動是用動態(tài)聯(lián)編實現(xiàn)的。動態(tài)聯(lián)
3、編是運行階段完成的聯(lián)編。運行時多態(tài)聯(lián)編是運行階段完成的聯(lián)編。運行時多態(tài)性主要是通過虛函數(shù)來實現(xiàn)的。態(tài)性主要是通過虛函數(shù)來實現(xiàn)的。 6.2 虛函數(shù) 虛函數(shù)提供了一種更為靈活的多態(tài)虛函數(shù)提供了一種更為靈活的多態(tài)性機制。虛函數(shù)允許函數(shù)調(diào)用與函數(shù)體性機制。虛函數(shù)允許函數(shù)調(diào)用與函數(shù)體之間的聯(lián)系在運行時才建立,也就是在之間的聯(lián)系在運行時才建立,也就是在運行時才決定如何動作,即所謂的動態(tài)運行時才決定如何動作,即所謂的動態(tài)聯(lián)編。聯(lián)編。 6.2.1 虛函數(shù)的引入虛函數(shù)的引入 例例6.1 虛函數(shù)的引例虛函數(shù)的引例1。#includeclass Apublic: void show() coutA; ;class
4、B:public A public: void show() coutshow(); pc=&b; pc-show(); return 0; 6.2.2 虛函數(shù)的作用和定義虛函數(shù)的作用和定義 1.虛函數(shù)的作用 虛函數(shù)同派生類的結(jié)合可使C+支持運行時的多態(tài)性,實現(xiàn)了在基類定義派生類所擁有的通用接口,而在派生類定義具體的實現(xiàn)方法,即常說的“同一接口,多種方法”,它幫助程序員處理越來越復(fù)雜的程序。 例例6.3 虛函數(shù)的作用。虛函數(shù)的作用。#includeclass Base public: Base(int x,int y) a=x; b=y; virtual void show() /定義虛函數(shù)定
5、義虛函數(shù)show() coutBase-n; couta bendl; private: int a,b; ;class Derived : public Base public: Derived(int x,int y,int z):Base(x,y)c=z; void show() /重新定義虛函數(shù)重新定義虛函數(shù)show() cout Derived-n; coutcshow(); /調(diào)用基類調(diào)用基類Base的的show()版本版本 pc=&mc; pc-show(); /調(diào)用派生類調(diào)用派生類Derived的的show()版本版本 程序運行結(jié)果如下程序運行結(jié)果如下:Base-60 60De
6、rived-30 2. 虛函數(shù)的定義虛函數(shù)的定義定義虛函數(shù)的方法如下定義虛函數(shù)的方法如下:virtual 函數(shù)類型函數(shù)類型 函數(shù)名函數(shù)名(形參表形參表) / 函數(shù)體函數(shù)體 例6.4 虛函數(shù)的定義舉例。#includeclass Grandam public: virtual void introduce_self() / 定義虛函數(shù)introduce_self() coutI am grandam.endl; ;class Mother:public Grandam public: void introduce_self() / 重新定義虛函數(shù)introduce_self() coutI am
7、 mother.endl;class Daughter:public Mother public: void introduce_self() / 重新定義虛函數(shù)introduce_self() coutI am roduce_self();/調(diào)用基類調(diào)用基類Grandam的的introduce_self() ptr=&m; ptr-introduce_self();/ 調(diào)用派生類調(diào)用派生類Mother的的introduce_self() ptr=&d; ptr-introduce_self(); /調(diào)用派生類調(diào)用派生類 / Daughter的的introduce_se
8、lf() 6.2.4虛函數(shù)與重載函數(shù)的關(guān)系虛函數(shù)與重載函數(shù)的關(guān)系 在一個派生類中重新定義基類的虛函數(shù)是函數(shù)重載的另在一個派生類中重新定義基類的虛函數(shù)是函數(shù)重載的另一種形式,但它不同于一般的函數(shù)重載。一種形式,但它不同于一般的函數(shù)重載。 普通的函數(shù)重載時,其函數(shù)的參數(shù)或參數(shù)類型必須有所普通的函數(shù)重載時,其函數(shù)的參數(shù)或參數(shù)類型必須有所不同,函數(shù)的返回類型也可以不同。不同,函數(shù)的返回類型也可以不同。 當重載一個虛函數(shù)時,也就是說在派生類中重新定義虛當重載一個虛函數(shù)時,也就是說在派生類中重新定義虛函數(shù)時,要求函數(shù)名、返回類型、參數(shù)個數(shù)、參數(shù)的類型函數(shù)時,要求函數(shù)名、返回類型、參數(shù)個數(shù)、參數(shù)的類型和順序
9、與基類中的虛函數(shù)原型完全相同。和順序與基類中的虛函數(shù)原型完全相同。 如果僅僅返回類型不同,其余均相同,系統(tǒng)會給出錯誤如果僅僅返回類型不同,其余均相同,系統(tǒng)會給出錯誤信息信息; 若僅僅函數(shù)名相同,而參數(shù)的個數(shù)、類型或順序不同,若僅僅函數(shù)名相同,而參數(shù)的個數(shù)、類型或順序不同,系統(tǒng)將它作為普通的函數(shù)重載,這時將丟失虛函數(shù)的特性。系統(tǒng)將它作為普通的函數(shù)重載,這時將丟失虛函數(shù)的特性。6.3 純虛函數(shù)和抽象類純虛函數(shù)和抽象類 6.3.1 純虛函數(shù)純虛函數(shù) 純虛函數(shù)是一個在基類中說明的虛函純虛函數(shù)是一個在基類中說明的虛函數(shù),它在該基類中沒有定義,但要求在數(shù),它在該基類中沒有定義,但要求在它的派生類中必須定義
10、自己的版本,或它的派生類中必須定義自己的版本,或重新說明為純虛函數(shù)。重新說明為純虛函數(shù)。 純虛函數(shù)的定義形式如下純虛函數(shù)的定義形式如下: virtual 函數(shù)類型函數(shù)類型 函數(shù)名函數(shù)名(參數(shù)表參數(shù)表)=0; 例例6.9純虛函數(shù)的使用。純虛函數(shù)的使用。#includeclass Circle public: void setr(int x) r=x; virtual void show()=0; / 純虛函數(shù)純虛函數(shù)protected: int r;class Area:public Circlepublic: void show() coutArea is 3.14*r*rendl; / 重定義虛函數(shù)重定義虛函數(shù)show( )class Perimeter:public Circlepublic: void show()coutPerimeter is 2*3.14*rshow(); ptr=&ob2;
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國提花針織面料數(shù)據(jù)監(jiān)測研究報告
- 新型儲能在電動汽車領(lǐng)域的應(yīng)用
- 第二單元《 參考活動3 應(yīng)對來自同伴的壓力》教學設(shè)計 -2024-2025學年初中綜合實踐活動蘇少版八年級上冊
- 2025至2030年中國手搖式冷裱機數(shù)據(jù)監(jiān)測研究報告
- 部編版七年級下冊語文期末復(fù)習資料
- 2025年湖南有色金屬職業(yè)技術(shù)學院單招職業(yè)技能測試題庫參考答案
- 2025至2030年中國平移門數(shù)據(jù)監(jiān)測研究報告
- 2025年度時尚服裝店鋪轉(zhuǎn)讓協(xié)議書模板
- 二零二五年度單身公寓租賃與心理健康咨詢服務(wù)合同
- 二零二五年度股東分紅保密及競業(yè)禁止協(xié)議書
- 2025年湖北省技能高考(建筑技術(shù)類)《建筑構(gòu)造》模擬練習試題庫(含答案)
- 撤銷失信名單申請書
- 2025年度養(yǎng)老服務(wù)機構(gòu)場地租賃合同及養(yǎng)老服務(wù)協(xié)議
- 貴州省情知識考試題庫500題(含答案)
- 大學生家長陪讀承諾書
- 安全生產(chǎn)事故調(diào)查與案例分析(第3版)課件 呂淑然 第5章 事故案例評析
- 2024年泰州職業(yè)技術(shù)學院高職單招數(shù)學歷年參考題庫含答案解析
- 勞動法培訓課件
- 2024-2025學年成都市成華區(qū)七年級上英語期末考試題(含答案)
- 2024年05月青海青海省農(nóng)商銀行(農(nóng)信社)系統(tǒng)招考專業(yè)人才筆試歷年參考題庫附帶答案詳解
- 2025年山西杏花村汾酒集團限責任公司人才招聘71名高頻重點提升(共500題)附帶答案詳解
評論
0/150
提交評論