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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

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

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

8、的不可省調(diào)用虛函數(shù)時,系統(tǒng)對它將采用動態(tài)聯(lián)編的方式進行處理。第12頁,共26頁,2022年,5月20日,19點51分,星期二8.2 多態(tài)性8.2.3 動態(tài)多態(tài)的實現(xiàn)方法2. 動態(tài)聯(lián)編的機制第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點51分,星期二8.2 多態(tài)性8.2.3 動態(tài)多態(tài)的實現(xiàn)方法2. 動態(tài)聯(lián)編的機制第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點51分,星期二8.2 多態(tài)性8.2.3 動態(tài)多態(tài)的實現(xiàn)方法2. 動態(tài)聯(lián)編的機制第8章 繼承與多態(tài)動態(tài)聯(lián)編的基本步驟在編譯過程中,掃描到表達式pb-f()時,首先檢查f()是否為虛函數(shù)(若()不是虛函數(shù),則按靜態(tài)聯(lián)編處理,在編譯時必須為f()確定對應的函數(shù)體代碼);(2)若()為虛函數(shù),則僅把與f(

10、)同原型的虛函數(shù)的地址信息等列表待查;(3)在程序運行階段,當程序執(zhí)行到表達式pb-f()時,根據(jù)指針當前所指向的對象類屬,來決定這時的f()應執(zhí)行哪個類中的哪個f(),從而決定執(zhí)行哪個函數(shù)體。第15頁,共26頁,2022年,5月20日,19點51分,星期二8.2 多態(tài)性8.2.3 動態(tài)多態(tài)的實現(xiàn)方法2. 動態(tài)聯(lián)編的機制第8章 繼承與多態(tài)虛函數(shù)的動態(tài)聯(lián)編的實現(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)運行著的程序根據(jù)查對當前指針pb所指向的對象是屬于哪個類的,再決定到底執(zhí)行哪個f()。第16頁,共26頁,2022年,5月20日,19點51分,星期二8.2 多態(tài)性8.2.3 動態(tài)多態(tài)的實現(xiàn)方法2. 動態(tài)聯(lián)編的機制第8章 繼承與多態(tài)采用虛函數(shù)對于程序有益之處在于。1)可使程序簡單易讀。2)它使得程序模塊間的獨立性加強。3)增加了程序的易維護性。4)提高了程序中“信息隱藏”的等級。第17頁,共26頁,2022年,5月20日,19點51分,星期二8.2 多態(tài)性8.2.4 純虛函數(shù)和抽象基類第8章 繼承與多態(tài)抽象基類的概念是虛函數(shù)概念的自然引申,它是虛函數(shù)使用的一個更理想的

12、形式。virtual函數(shù)原型=0;若在虛函數(shù)的原型后加上“0”字樣而替掉函數(shù)定義體(沒有具體的實現(xiàn)),則這樣的虛函數(shù)稱為純虛函數(shù)。virtual void print()=0;第18頁,共26頁,2022年,5月20日,19點51分,星期二8.2 多態(tài)性8.2.4 純虛函數(shù)和抽象基類第8章 繼承與多態(tài)含有純虛函數(shù)的類稱為抽象基類。抽象基類的設計意義在于:基類并不是完整的類,它在程序中只起到一種框架的作用,它所包含的是與定積分計算相關的數(shù)據(jù)成員,和計算定積分的函數(shù)成員的格式:函數(shù)名,參數(shù)表,返回類型等等。第19頁,共26頁,2022年,5月20日,19點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) /基類構造函數(shù)virtual void integrate(void); /基類中說明了一個虛函數(shù)integratevirtual inte_algo() ;示例基類第20頁,共26頁,2022年,5月20日,19點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點51分,星期二 小結第8章 繼承與多態(tài)本節(jié)主要介紹繼承和多態(tài)的知識:靜態(tài)多態(tài)動態(tài)多態(tài)純虛函數(shù)與抽象基類第22頁,共26頁,2022年,5月20日,19點51分,星期二小測驗(題目部分)第8章 繼承與多態(tài)1.選擇題(多項選擇題)1、以下哪些是采用虛函數(shù)的好處:( )A. 可使程序簡單易讀B.

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

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

溫馨提示

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

評論

0/150

提交評論