繼承與多態(tài)精品課件_第1頁(yè)
繼承與多態(tài)精品課件_第2頁(yè)
繼承與多態(tài)精品課件_第3頁(yè)
繼承與多態(tài)精品課件_第4頁(yè)
繼承與多態(tài)精品課件_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、繼承與多態(tài)第1頁(yè),共26頁(yè),2022年,5月20日,19點(diǎn)51分,星期二第8章 繼承與多態(tài) 靜態(tài)多態(tài)的實(shí)現(xiàn)動(dòng)態(tài)多態(tài)的實(shí)現(xiàn)純虛函數(shù)與抽象基類靜態(tài)多態(tài)的實(shí)現(xiàn)動(dòng)態(tài)多態(tài)的實(shí)現(xiàn)動(dòng)態(tài)多態(tài)的實(shí)現(xiàn) 掌握靜態(tài)多態(tài)的實(shí)現(xiàn) 掌握動(dòng)態(tài)多態(tài)的實(shí)現(xiàn)熟悉純虛函數(shù)與抽象基類的應(yīng)用第2頁(yè),共26頁(yè),2022年,5月20日,19點(diǎn)51分,星期二8.2 多態(tài)性8.2.1 多態(tài)的含義,實(shí)現(xiàn)意義及分類第8章 繼承與多態(tài)多態(tài)(polymorphism)一詞最初來(lái)源于希臘語(yǔ)polumorphos,含義是具有多種形式或形態(tài)的現(xiàn)象。在程序設(shè)計(jì)領(lǐng)域,一個(gè)廣泛認(rèn)可的定義是“一種將不同的特殊行為和單個(gè)泛化記號(hào)相關(guān)聯(lián)的能力”,這里的泛化記號(hào)其實(shí)指的就

2、是函數(shù)名。多態(tài)的含義第3頁(yè),共26頁(yè),2022年,5月20日,19點(diǎn)51分,星期二8.2 多態(tài)性8.2.1 多態(tài)的含義,實(shí)現(xiàn)意義及分類第8章 繼承與多態(tài)C+程序中允許大量的同名函數(shù)出現(xiàn),體現(xiàn)出多態(tài)的使用價(jià)值。多態(tài)的意義1)對(duì)不同的數(shù)據(jù)類型,采用相同或是相似的操作時(shí),使用同名函數(shù)。2)在程序運(yùn)行中,在某個(gè)環(huán)節(jié)要調(diào)用對(duì)象的一個(gè)特定的方法,而不管這個(gè)對(duì)象是由哪一個(gè)類創(chuàng)建的,這些類都支持這種方法。第4頁(yè),共26頁(yè),2022年,5月20日,19點(diǎn)51分,星期二8.2 多態(tài)性8.2.1 多態(tài)的含義,實(shí)現(xiàn)意義及分類第8章 繼承與多態(tài)C+程序中,按照實(shí)現(xiàn)機(jī)制,多態(tài)可以分為兩種多態(tài)的類型C+語(yǔ)言允許函數(shù)重載和運(yùn)

3、算符重載,使用同樣的函數(shù)名和同樣的運(yùn)算符來(lái)完成不同的數(shù)據(jù)處理與操作。C+語(yǔ)言程序中允許存在有若干函數(shù),有完全相同的函數(shù)原型,卻可以有多種多樣的相異的函數(shù)體。overloadingoverriding第5頁(yè),共26頁(yè),2022年,5月20日,19點(diǎn)51分,星期二8.2 多態(tài)性8.2.2 靜態(tài)多態(tài)的實(shí)現(xiàn)方法第8章 繼承與多態(tài)函數(shù)重載指的是,允許多個(gè)不同函數(shù)使用同一個(gè)函數(shù)名,但要求這些同名函數(shù)具有不同的參數(shù)表(當(dāng)然,函數(shù)體的實(shí)現(xiàn)代碼通常也不同)。系統(tǒng)對(duì)這種多態(tài)性,對(duì)同名函數(shù)的處理比較簡(jiǎn)單。在編譯過(guò)程中就可以確定該函數(shù)與程序中的哪一段代碼相聯(lián)系,即在編譯時(shí)就已確定函數(shù)調(diào)用語(yǔ)句對(duì)應(yīng)的函數(shù)體代碼,故稱為靜

4、態(tài)聯(lián)編(static banding)處理方式。第6頁(yè),共26頁(yè),2022年,5月20日,19點(diǎn)51分,星期二8.2 多態(tài)性8.2.2 靜態(tài)多態(tài)的實(shí)現(xiàn)方法第8章 繼承與多態(tài)示例void run(int a);void run(float a);run(1);run(1.0);第7頁(yè),共26頁(yè),2022年,5月20日,19點(diǎn)51分,星期二8.2 多態(tài)性8.2.3 動(dòng)態(tài)多態(tài)的實(shí)現(xiàn)方法第8章 繼承與多態(tài)C+語(yǔ)言程序中允許存在有若干函數(shù),有完全相同的函數(shù)原型,卻可以有多種多樣的相異的函數(shù)體,這種現(xiàn)象稱為函數(shù)的覆蓋。在編譯階段,系統(tǒng)是無(wú)法判斷此次調(diào)用應(yīng)執(zhí)行哪一段函數(shù)代碼。只有到了運(yùn)行過(guò)程中執(zhí)行到此處時(shí),

5、才能臨時(shí)判斷應(yīng)執(zhí)行哪一段函數(shù)代碼,這種處理方式稱為動(dòng)態(tài)聯(lián)編(dynamic banding)。第8頁(yè),共26頁(yè),2022年,5月20日,19點(diǎn)51分,星期二8.2 多態(tài)性8.2.3 動(dòng)態(tài)多態(tài)的實(shí)現(xiàn)方法1. 虛函數(shù)第8章 繼承與多態(tài)虛函數(shù)是C+語(yǔ)言中的重要概念。虛函數(shù)在編程中的靈活使用,可使程序具有更好的結(jié)構(gòu)和可重用性。virtual 返回類型 函數(shù)名 ( 參數(shù)表 ) ;示例virtual void run(int a) ;第9頁(yè),共26頁(yè),2022年,5月20日,19點(diǎn)51分,星期二8.2 多態(tài)性8.2.3 動(dòng)態(tài)多態(tài)的實(shí)現(xiàn)方法1. 虛函數(shù)第8章 繼承與多態(tài)虛函數(shù)常用于基類與派生類中class

6、graphelem /自定義類graphelem,將作為其它圖元類的基類protected:int color; /顏色colorpublic:graphelem(int col)color=col;virtual void draw() ;/基類中含有一個(gè)虛函數(shù)virtual graphelem() ;基類第10頁(yè),共26頁(yè),2022年,5月20日,19點(diǎn)51分,星期二8.2 多態(tài)性8.2.3 動(dòng)態(tài)多態(tài)的實(shí)現(xiàn)方法1. 虛函數(shù)第8章 繼承與多態(tài)虛函數(shù)常用于基類與派生類中class line:public graphelem /自定義類line,為基類graphelem 的派生類public:v

7、irtual void draw() ; /虛函數(shù)draw,負(fù)責(zé)畫(huà)出“l(fā)ine”.;class circle:public graphelem /自定義類circle,為基類graphelem 的派生類public:virtual void draw() ; /虛函數(shù)draw,負(fù)責(zé)畫(huà)“circle”;派生類第11頁(yè),共26頁(yè),2022年,5月20日,19點(diǎn)51分,星期二8.2 多態(tài)性8.2.3 動(dòng)態(tài)多態(tài)的實(shí)現(xiàn)方法1. 虛函數(shù)第8章 繼承與多態(tài)使用虛函數(shù)時(shí),需要注意以下3點(diǎn)說(shuō)明某一函數(shù)成員為虛函數(shù),方法是在說(shuō)明前加關(guān)鍵字“virtual”。派生類中虛函數(shù)處的關(guān)鍵字virtual可以省略,但基類處

8、的不可省調(diào)用虛函數(shù)時(shí),系統(tǒng)對(duì)它將采用動(dòng)態(tài)聯(lián)編的方式進(jìn)行處理。第12頁(yè),共26頁(yè),2022年,5月20日,19點(diǎn)51分,星期二8.2 多態(tài)性8.2.3 動(dòng)態(tài)多態(tài)的實(shí)現(xiàn)方法2. 動(dòng)態(tài)聯(lián)編的機(jī)制第8章 繼承與多態(tài)使用動(dòng)態(tài)聯(lián)編時(shí),確定要調(diào)用的函數(shù)有兩種方式line ln1; circle cir1; triangle tri1;ln1.draw(); cir1.draw(); tri1.draw();通過(guò)類對(duì)象第13頁(yè),共26頁(yè),2022年,5月20日,19點(diǎn)51分,星期二8.2 多態(tài)性8.2.3 動(dòng)態(tài)多態(tài)的實(shí)現(xiàn)方法2. 動(dòng)態(tài)聯(lián)編的機(jī)制第8章 繼承與多態(tài)使用動(dòng)態(tài)聯(lián)編時(shí),確定要調(diào)用的函數(shù)有兩種方式gra

9、phelem *pObj;line ln1; circle cir1; triangle tri1;pObj=&lin1; pObj-draw();pObj=&cir1; pObj-draw();pObj=&tri1; pObj-draw();通過(guò)指針第14頁(yè),共26頁(yè),2022年,5月20日,19點(diǎn)51分,星期二8.2 多態(tài)性8.2.3 動(dòng)態(tài)多態(tài)的實(shí)現(xiàn)方法2. 動(dòng)態(tài)聯(lián)編的機(jī)制第8章 繼承與多態(tài)動(dòng)態(tài)聯(lián)編的基本步驟在編譯過(guò)程中,掃描到表達(dá)式pb-f()時(shí),首先檢查f()是否為虛函數(shù)(若()不是虛函數(shù),則按靜態(tài)聯(lián)編處理,在編譯時(shí)必須為f()確定對(duì)應(yīng)的函數(shù)體代碼);(2)若()為虛函數(shù),則僅把與f(

10、)同原型的虛函數(shù)的地址信息等列表待查;(3)在程序運(yùn)行階段,當(dāng)程序執(zhí)行到表達(dá)式pb-f()時(shí),根據(jù)指針當(dāng)前所指向的對(duì)象類屬,來(lái)決定這時(shí)的f()應(yīng)執(zhí)行哪個(gè)類中的哪個(gè)f(),從而決定執(zhí)行哪個(gè)函數(shù)體。第15頁(yè),共26頁(yè),2022年,5月20日,19點(diǎn)51分,星期二8.2 多態(tài)性8.2.3 動(dòng)態(tài)多態(tài)的實(shí)現(xiàn)方法2. 動(dòng)態(tài)聯(lián)編的機(jī)制第8章 繼承與多態(tài)虛函數(shù)的動(dòng)態(tài)聯(lián)編的實(shí)現(xiàn),主要依賴于下面一些條件:1)基類CB 可有多個(gè)派生類CD1,CD2,CDn;2)CB 類指針pb 可以指向CB 的對(duì)象,也可以指向CD1,CD2,CDn的對(duì)象;3)CB 類和CD1,CD2,CDn 類可以有同樣原型(而函數(shù)體各異)的函數(shù)

11、成員f()(虛函數(shù));4)運(yùn)行著的程序根據(jù)查對(duì)當(dāng)前指針pb所指向的對(duì)象是屬于哪個(gè)類的,再?zèng)Q定到底執(zhí)行哪個(gè)f()。第16頁(yè),共26頁(yè),2022年,5月20日,19點(diǎn)51分,星期二8.2 多態(tài)性8.2.3 動(dòng)態(tài)多態(tài)的實(shí)現(xiàn)方法2. 動(dòng)態(tài)聯(lián)編的機(jī)制第8章 繼承與多態(tài)采用虛函數(shù)對(duì)于程序有益之處在于。1)可使程序簡(jiǎn)單易讀。2)它使得程序模塊間的獨(dú)立性加強(qiáng)。3)增加了程序的易維護(hù)性。4)提高了程序中“信息隱藏”的等級(jí)。第17頁(yè),共26頁(yè),2022年,5月20日,19點(diǎn)51分,星期二8.2 多態(tài)性8.2.4 純虛函數(shù)和抽象基類第8章 繼承與多態(tài)抽象基類的概念是虛函數(shù)概念的自然引申,它是虛函數(shù)使用的一個(gè)更理想的

12、形式。virtual函數(shù)原型=0;若在虛函數(shù)的原型后加上“0”字樣而替掉函數(shù)定義體(沒(méi)有具體的實(shí)現(xiàn)),則這樣的虛函數(shù)稱為純虛函數(shù)。virtual void print()=0;第18頁(yè),共26頁(yè),2022年,5月20日,19點(diǎn)51分,星期二8.2 多態(tài)性8.2.4 純虛函數(shù)和抽象基類第8章 繼承與多態(tài)含有純虛函數(shù)的類稱為抽象基類。抽象基類的設(shè)計(jì)意義在于:基類并不是完整的類,它在程序中只起到一種框架的作用,它所包含的是與定積分計(jì)算相關(guān)的數(shù)據(jù)成員,和計(jì)算定積分的函數(shù)成員的格式:函數(shù)名,參數(shù)表,返回類型等等。第19頁(yè),共26頁(yè),2022年,5月20日,19點(diǎn)51分,星期二8.2 多態(tài)性8.2.4 純

13、虛函數(shù)和抽象基類第8章 繼承與多態(tài)class inte_algo /基類inte_algoprotected:public:inte_algo (float left, float right, int steps) /基類構(gòu)造函數(shù)virtual void integrate(void); /基類中說(shuō)明了一個(gè)虛函數(shù)integratevirtual inte_algo() ;示例基類第20頁(yè),共26頁(yè),2022年,5月20日,19點(diǎn)51分,星期二8.2 多態(tài)性8.2.4 純虛函數(shù)和抽象基類第8章 繼承與多態(tài)class rectangle:public inte_algo /派生類rectangl

14、epublic:rectangle(float left,float right,int steps):inte_algo (left,right,steps)virtual void integrate(void); /虛函數(shù)integrate;示例派生類第21頁(yè),共26頁(yè),2022年,5月20日,19點(diǎn)51分,星期二 小結(jié)第8章 繼承與多態(tài)本節(jié)主要介紹繼承和多態(tài)的知識(shí):靜態(tài)多態(tài)動(dòng)態(tài)多態(tài)純虛函數(shù)與抽象基類第22頁(yè),共26頁(yè),2022年,5月20日,19點(diǎn)51分,星期二小測(cè)驗(yàn)(題目部分)第8章 繼承與多態(tài)1.選擇題(多項(xiàng)選擇題)1、以下哪些是采用虛函數(shù)的好處:( )A. 可使程序簡(jiǎn)單易讀B.

15、使得程序模塊間的獨(dú)立性加強(qiáng)C. 增加了程序的易維護(hù)性D. 提高了程序中“信息隱藏”的等級(jí)2.選擇題(單項(xiàng)選擇題)2、( )是一個(gè)在基類中說(shuō)明的虛函數(shù),它在該基類中沒(méi)有定義,但要求任何派生類都必須定義自己的版本。A.虛析構(gòu)函數(shù)B.虛構(gòu)造函數(shù)C.純虛函數(shù)D.靜態(tài)成員函數(shù)3、帶有虛基類的多層派生類構(gòu)造函數(shù)的成員初始化列表中都要列出虛基類的構(gòu)造函數(shù),這樣將對(duì)虛基類的子對(duì)象初始化的次數(shù)是( )A.與虛基類下面的派生類個(gè)數(shù)有關(guān)B.多次C.二次D.一次 第23頁(yè),共26頁(yè),2022年,5月20日,19點(diǎn)51分,星期二小測(cè)驗(yàn)(答案部分)第8章 繼承與多態(tài)1.選擇題(多項(xiàng)選擇題)1、以下哪些是采用虛函數(shù)的好處:

16、( ACD )A. 可使程序簡(jiǎn)單易讀B. 使得程序模塊間的獨(dú)立性加強(qiáng)C. 增加了程序的易維護(hù)性D. 提高了程序中“信息隱藏”的等級(jí)2.選擇題(單項(xiàng)選擇題)2、( C )是一個(gè)在基類中說(shuō)明的虛函數(shù),它在該基類中沒(méi)有定義,但要求任何派生類都必須定義自己的版本。A.虛析構(gòu)函數(shù)B.虛構(gòu)造函數(shù)C.純虛函數(shù)D.靜態(tài)成員函數(shù)3、帶有虛基類的多層派生類構(gòu)造函數(shù)的成員初始化列表中都要列出虛基類的構(gòu)造函數(shù),這樣將對(duì)虛基類的子對(duì)象初始化的次數(shù)是( D )A.與虛基類下面的派生類個(gè)數(shù)有關(guān)B.多次C.二次D.一次 第24頁(yè),共26頁(yè),2022年,5月20日,19點(diǎn)51分,星期二課后作業(yè)第8章 繼承與多態(tài)【作業(yè)1】設(shè)計(jì)一個(gè)日期類Date,包括年、月、日等私有數(shù)據(jù)成員。要求實(shí)現(xiàn)日期的基本運(yùn)算,如一日期加上天數(shù)、一日期減去天數(shù)、兩日期相差的天數(shù)等。閏年計(jì)算方式:if (year能被4整除 and 不能被100整除) or year能被400整除 思路分析:在Date類中設(shè)計(jì)如下重載運(yùn)算符函數(shù): Date operator+(int days); 返回一日期加天數(shù)得到的日期 Date opera

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論