




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、繼承與多態(tài)第1頁,共26頁,2022年,5月20日,19點(diǎn)51分,星期二第8章 繼承與多態(tài) 靜態(tài)多態(tài)的實(shí)現(xiàn)動態(tài)多態(tài)的實(shí)現(xiàn)純虛函數(shù)與抽象基類靜態(tài)多態(tài)的實(shí)現(xiàn)動態(tài)多態(tài)的實(shí)現(xiàn)動態(tài)多態(tài)的實(shí)現(xiàn) 掌握靜態(tài)多態(tài)的實(shí)現(xiàn) 掌握動態(tài)多態(tài)的實(shí)現(xiàn)熟悉純虛函數(shù)與抽象基類的應(yīng)用第2頁,共26頁,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)一詞最初來源于希臘語polumorphos,含義是具有多種形式或形態(tài)的現(xiàn)象。在程序設(shè)計(jì)領(lǐng)域,一個廣泛認(rèn)可的定義是“一種將不同的特殊行為和單個泛化記號相關(guān)聯(lián)的能力”,這里的泛化記號其實(shí)指的就
2、是函數(shù)名。多態(tài)的含義第3頁,共26頁,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)的使用價值。多態(tài)的意義1)對不同的數(shù)據(jù)類型,采用相同或是相似的操作時,使用同名函數(shù)。2)在程序運(yùn)行中,在某個環(huán)節(jié)要調(diào)用對象的一個特定的方法,而不管這個對象是由哪一個類創(chuàng)建的,這些類都支持這種方法。第4頁,共26頁,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+語言允許函數(shù)重載和運(yùn)
3、算符重載,使用同樣的函數(shù)名和同樣的運(yùn)算符來完成不同的數(shù)據(jù)處理與操作。C+語言程序中允許存在有若干函數(shù),有完全相同的函數(shù)原型,卻可以有多種多樣的相異的函數(shù)體。overloadingoverriding第5頁,共26頁,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ù)重載指的是,允許多個不同函數(shù)使用同一個函數(shù)名,但要求這些同名函數(shù)具有不同的參數(shù)表(當(dāng)然,函數(shù)體的實(shí)現(xiàn)代碼通常也不同)。系統(tǒng)對這種多態(tài)性,對同名函數(shù)的處理比較簡單。在編譯過程中就可以確定該函數(shù)與程序中的哪一段代碼相聯(lián)系,即在編譯時就已確定函數(shù)調(diào)用語句對應(yīng)的函數(shù)體代碼,故稱為靜
4、態(tài)聯(lián)編(static banding)處理方式。第6頁,共26頁,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頁,共26頁,2022年,5月20日,19點(diǎn)51分,星期二8.2 多態(tài)性8.2.3 動態(tài)多態(tài)的實(shí)現(xiàn)方法第8章 繼承與多態(tài)C+語言程序中允許存在有若干函數(shù),有完全相同的函數(shù)原型,卻可以有多種多樣的相異的函數(shù)體,這種現(xiàn)象稱為函數(shù)的覆蓋。在編譯階段,系統(tǒng)是無法判斷此次調(diào)用應(yīng)執(zhí)行哪一段函數(shù)代碼。只有到了運(yùn)行過程中執(zhí)行到此處時,
5、才能臨時判斷應(yīng)執(zhí)行哪一段函數(shù)代碼,這種處理方式稱為動態(tài)聯(lián)編(dynamic banding)。第8頁,共26頁,2022年,5月20日,19點(diǎn)51分,星期二8.2 多態(tài)性8.2.3 動態(tài)多態(tài)的實(shí)現(xiàn)方法1. 虛函數(shù)第8章 繼承與多態(tài)虛函數(shù)是C+語言中的重要概念。虛函數(shù)在編程中的靈活使用,可使程序具有更好的結(jié)構(gòu)和可重用性。virtual 返回類型 函數(shù)名 ( 參數(shù)表 ) ;示例virtual void run(int a) ;第9頁,共26頁,2022年,5月20日,19點(diǎn)51分,星期二8.2 多態(tài)性8.2.3 動態(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() ;/基類中含有一個虛函數(shù)virtual graphelem() ;基類第10頁,共26頁,2022年,5月20日,19點(diǎn)51分,星期二8.2 多態(tài)性8.2.3 動態(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é)畫出“l(fā)ine”.;class circle:public graphelem /自定義類circle,為基類graphelem 的派生類public:virtual void draw() ; /虛函數(shù)draw,負(fù)責(zé)畫“circle”;派生類第11頁,共26頁,2022年,5月20日,19點(diǎn)51分,星期二8.2 多態(tài)性8.2.3 動態(tài)多態(tài)的實(shí)現(xiàn)方法1. 虛函數(shù)第8章 繼承與多態(tài)使用虛函數(shù)時,需要注意以下3點(diǎn)說明某一函數(shù)成員為虛函數(shù),方法是在說明前加關(guān)鍵字“virtual”。派生類中虛函數(shù)處的關(guān)鍵字virtual可以省略,但基類處
8、的不可省調(diào)用虛函數(shù)時,系統(tǒng)對它將采用動態(tài)聯(lián)編的方式進(jìn)行處理。第12頁,共26頁,2022年,5月20日,19點(diǎn)51分,星期二8.2 多態(tài)性8.2.3 動態(tài)多態(tài)的實(shí)現(xiàn)方法2. 動態(tài)聯(lián)編的機(jī)制第8章 繼承與多態(tài)使用動態(tài)聯(lián)編時,確定要調(diào)用的函數(shù)有兩種方式line ln1; circle cir1; triangle tri1;ln1.draw(); cir1.draw(); tri1.draw();通過類對象第13頁,共26頁,2022年,5月20日,19點(diǎn)51分,星期二8.2 多態(tài)性8.2.3 動態(tài)多態(tài)的實(shí)現(xiàn)方法2. 動態(tài)聯(lián)編的機(jī)制第8章 繼承與多態(tài)使用動態(tài)聯(lián)編時,確定要調(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();通過指針第14頁,共26頁,2022年,5月20日,19點(diǎn)51分,星期二8.2 多態(tài)性8.2.3 動態(tài)多態(tài)的實(shí)現(xiàn)方法2. 動態(tài)聯(lián)編的機(jī)制第8章 繼承與多態(tài)動態(tài)聯(lián)編的基本步驟在編譯過程中,掃描到表達(dá)式pb-f()時,首先檢查f()是否為虛函數(shù)(若()不是虛函數(shù),則按靜態(tài)聯(lián)編處理,在編譯時必須為f()確定對應(yīng)的函數(shù)體代碼);(2)若()為虛函數(shù),則僅把與f(
10、)同原型的虛函數(shù)的地址信息等列表待查;(3)在程序運(yùn)行階段,當(dāng)程序執(zhí)行到表達(dá)式pb-f()時,根據(jù)指針當(dāng)前所指向的對象類屬,來決定這時的f()應(yīng)執(zhí)行哪個類中的哪個f(),從而決定執(zhí)行哪個函數(shù)體。第15頁,共26頁,2022年,5月20日,19點(diǎn)51分,星期二8.2 多態(tài)性8.2.3 動態(tài)多態(tài)的實(shí)現(xiàn)方法2. 動態(tài)聯(lián)編的機(jī)制第8章 繼承與多態(tài)虛函數(shù)的動態(tài)聯(lián)編的實(shí)現(xiàn),主要依賴于下面一些條件:1)基類CB 可有多個派生類CD1,CD2,CDn;2)CB 類指針pb 可以指向CB 的對象,也可以指向CD1,CD2,CDn的對象;3)CB 類和CD1,CD2,CDn 類可以有同樣原型(而函數(shù)體各異)的函數(shù)
11、成員f()(虛函數(shù));4)運(yùn)行著的程序根據(jù)查對當(dāng)前指針pb所指向的對象是屬于哪個類的,再決定到底執(zhí)行哪個f()。第16頁,共26頁,2022年,5月20日,19點(diǎn)51分,星期二8.2 多態(tài)性8.2.3 動態(tài)多態(tài)的實(shí)現(xiàn)方法2. 動態(tài)聯(lián)編的機(jī)制第8章 繼承與多態(tài)采用虛函數(shù)對于程序有益之處在于。1)可使程序簡單易讀。2)它使得程序模塊間的獨(dú)立性加強(qiáng)。3)增加了程序的易維護(hù)性。4)提高了程序中“信息隱藏”的等級。第17頁,共26頁,2022年,5月20日,19點(diǎn)51分,星期二8.2 多態(tài)性8.2.4 純虛函數(shù)和抽象基類第8章 繼承與多態(tài)抽象基類的概念是虛函數(shù)概念的自然引申,它是虛函數(shù)使用的一個更理想的
12、形式。virtual函數(shù)原型=0;若在虛函數(shù)的原型后加上“0”字樣而替掉函數(shù)定義體(沒有具體的實(shí)現(xiàn)),則這樣的虛函數(shù)稱為純虛函數(shù)。virtual void print()=0;第18頁,共26頁,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頁,共26頁,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); /基類中說明了一個虛函數(shù)integratevirtual inte_algo() ;示例基類第20頁,共26頁,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頁,共26頁,2022年,5月20日,19點(diǎn)51分,星期二 小結(jié)第8章 繼承與多態(tài)本節(jié)主要介紹繼承和多態(tài)的知識:靜態(tài)多態(tài)動態(tài)多態(tài)純虛函數(shù)與抽象基類第22頁,共26頁,2022年,5月20日,19點(diǎn)51分,星期二小測驗(yàn)(題目部分)第8章 繼承與多態(tài)1.選擇題(多項(xiàng)選擇題)1、以下哪些是采用虛函數(shù)的好處:( )A. 可使程序簡單易讀B.
15、使得程序模塊間的獨(dú)立性加強(qiáng)C. 增加了程序的易維護(hù)性D. 提高了程序中“信息隱藏”的等級2.選擇題(單項(xiàng)選擇題)2、( )是一個在基類中說明的虛函數(shù),它在該基類中沒有定義,但要求任何派生類都必須定義自己的版本。A.虛析構(gòu)函數(shù)B.虛構(gòu)造函數(shù)C.純虛函數(shù)D.靜態(tài)成員函數(shù)3、帶有虛基類的多層派生類構(gòu)造函數(shù)的成員初始化列表中都要列出虛基類的構(gòu)造函數(shù),這樣將對虛基類的子對象初始化的次數(shù)是( )A.與虛基類下面的派生類個數(shù)有關(guān)B.多次C.二次D.一次 第23頁,共26頁,2022年,5月20日,19點(diǎn)51分,星期二小測驗(yàn)(答案部分)第8章 繼承與多態(tài)1.選擇題(多項(xiàng)選擇題)1、以下哪些是采用虛函數(shù)的好處:
16、( ACD )A. 可使程序簡單易讀B. 使得程序模塊間的獨(dú)立性加強(qiáng)C. 增加了程序的易維護(hù)性D. 提高了程序中“信息隱藏”的等級2.選擇題(單項(xiàng)選擇題)2、( C )是一個在基類中說明的虛函數(shù),它在該基類中沒有定義,但要求任何派生類都必須定義自己的版本。A.虛析構(gòu)函數(shù)B.虛構(gòu)造函數(shù)C.純虛函數(shù)D.靜態(tài)成員函數(shù)3、帶有虛基類的多層派生類構(gòu)造函數(shù)的成員初始化列表中都要列出虛基類的構(gòu)造函數(shù),這樣將對虛基類的子對象初始化的次數(shù)是( D )A.與虛基類下面的派生類個數(shù)有關(guān)B.多次C.二次D.一次 第24頁,共26頁,2022年,5月20日,19點(diǎn)51分,星期二課后作業(yè)第8章 繼承與多態(tài)【作業(yè)1】設(shè)計(jì)一個日期類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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6《景陽岡》教學(xué)設(shè)計(jì)2024-2025學(xué)年統(tǒng)編版語文五年級下冊
- 5一個豆莢里的五粒豆 第一課時 教學(xué)設(shè)計(jì)2024-2025學(xué)年語文四年級上冊統(tǒng)編版
- 13 橋 教學(xué)設(shè)計(jì)-2024-2025學(xué)年統(tǒng)編版語文六年級上冊
- Unit9Section B(2a-2c)教學(xué)設(shè)計(jì)2023-2024學(xué)年人教版七年級英語下冊
- 9《木蘭詩》(教學(xué)設(shè)計(jì))-2024-2025學(xué)年七年級語文下冊同步教學(xué)設(shè)計(jì)(統(tǒng)編版2024)
- 網(wǎng)絡(luò)銷售員工培訓(xùn)
- 2024學(xué)年九年級物理上冊 第8章 電磁相互作用及應(yīng)用 8.3電話和傳感器教學(xué)設(shè)計(jì) (新版)教科版
- 生鮮倉庫安全培訓(xùn)
- 2024秋七年級數(shù)學(xué)上冊 第二章 有理數(shù)2.9有理數(shù)的乘法 1有理數(shù)的乘法法則教學(xué)設(shè)計(jì)(新版)華東師大版
- 1《北京的春節(jié)》教學(xué)設(shè)計(jì)2023-2024學(xué)年統(tǒng)編版語文六年級下冊
- 2025陜西核工業(yè)工程勘察院有限公司招聘(21人)筆試參考題庫附帶答案詳解
- 2025年山東、湖北部分重點(diǎn)中學(xué)高中畢業(yè)班第二次模擬考試數(shù)學(xué)試題含解析
- 2025-2030中國集裝箱化和模塊化數(shù)據(jù)中心行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析研究報告
- 2025-2030中國防腐新材料行業(yè)市場深度調(diào)研及發(fā)展策略與投資前景預(yù)測研究報告
- 2025年超高功率大噸位電弧爐項(xiàng)目發(fā)展計(jì)劃
- 2025年護(hù)工考試試題及答案
- 2024年四川省高等職業(yè)教育單獨(dú)考試招生文化素質(zhì)考試中職英語試卷
- 全國第9個近視防控月活動總結(jié)
- 人教A版必修第二冊高一(下)數(shù)學(xué)6.3.2-6.3.3平面向量正交分解及坐標(biāo)表示【課件】
- 2025至2030年中國快速換模系統(tǒng)數(shù)據(jù)監(jiān)測研究報告
- 航空業(yè)勞動力安全保障措施
評論
0/150
提交評論