版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- NR-11c-生命科學(xué)試劑-MCE-9201
- 6-O-Sulfo-β-cyclodextrin-sodium-生命科學(xué)試劑-MCE-5754
- 2025年度高端火鍋店品牌連鎖合作協(xié)議
- 二零二五年度經(jīng)濟(jì)補(bǔ)償協(xié)議書(shū)-產(chǎn)品責(zé)任賠償協(xié)議
- 2025年度員工解除勞動(dòng)合同關(guān)系協(xié)議書(shū)(技術(shù)崗位)
- 施工單位關(guān)于項(xiàng)目驗(yàn)收的聯(lián)絡(luò)函
- 小額金融科技化營(yíng)銷戰(zhàn)略-以農(nóng)村貸款市場(chǎng)為例
- 《用正比例解決問(wèn)題》教學(xué)設(shè)計(jì)(人教版六年級(jí)數(shù)學(xué)下冊(cè))
- 個(gè)人雇傭合同協(xié)議模板
- 上海市短期勞務(wù)合同模板
- 2024簡(jiǎn)易租房合同下載打印
- TBSES 001-2024 建設(shè)項(xiàng)目環(huán)境影響后評(píng)價(jià)技術(shù)指南 污染影響類
- 阿基米德課件
- 2024年步步高高考英語(yǔ)大一輪復(fù)習(xí)(新人教版)基礎(chǔ)知識(shí)默寫(xiě)本必修第一冊(cè)含答案
- 盤(pán)錦市重點(diǎn)中學(xué)2024年中考英語(yǔ)全真模擬試卷含答案
- 2024年《幼兒教師職業(yè)道德》教案
- 平安產(chǎn)險(xiǎn)湖南省商業(yè)性雞蛋價(jià)格指數(shù)保險(xiǎn)條款
- 石家莊市第四十中學(xué)2021-2022學(xué)年七年級(jí)上學(xué)期期末考試數(shù)學(xué)試題
- 《共演戰(zhàn)略》分析工具
- 揚(yáng)州市古樹(shù)名木匯編
- 提高臥床患者踝泵運(yùn)動(dòng)的執(zhí)行率
評(píng)論
0/150
提交評(píng)論