c講稿 第八章多態(tài)性與虛函數(shù)_第1頁
c講稿 第八章多態(tài)性與虛函數(shù)_第2頁
c講稿 第八章多態(tài)性與虛函數(shù)_第3頁
c講稿 第八章多態(tài)性與虛函數(shù)_第4頁
c講稿 第八章多態(tài)性與虛函數(shù)_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

c講稿第八章多態(tài)性與虛函數(shù)2本章內(nèi)容6.1多態(tài)性的概念6.2虛函數(shù)6.3純虛函數(shù)與抽象類3目標(biāo)理解多態(tài)的概念、多態(tài)性的分類;理解靜態(tài)多態(tài)性與動(dòng)態(tài)多態(tài)性的區(qū)別;理解虛函數(shù)作用;掌握虛函數(shù)的定義與使用;掌握虛析構(gòu)函數(shù)的使用;掌握純虛函數(shù)與抽象類的應(yīng)用。4本章內(nèi)容6.1多態(tài)性的概念6.2虛函數(shù)6.3純虛函數(shù)與抽象類6.1多態(tài)性類是對(duì)象的抽象,對(duì)象是類的實(shí)例面向?qū)ο蟪绦蛟O(shè)計(jì)的三大特性封裝性——基礎(chǔ)繼承性——關(guān)鍵多態(tài)性——補(bǔ)充56.1多態(tài)性

(一)什么是多態(tài)?多態(tài)是指一個(gè)事物有多種形態(tài)。面向?qū)ο蟪绦蛟O(shè)計(jì)方法中

多態(tài)性——同樣的消息被不同類型的對(duì)象接收時(shí)導(dǎo)致完全不同的行為。在C++程序設(shè)計(jì)中

多態(tài)性——同一個(gè)函數(shù)名調(diào)用不同內(nèi)容的函數(shù)。66.1多態(tài)性

(二)多態(tài)的分類從系統(tǒng)實(shí)現(xiàn)的角度,多態(tài)性分為靜態(tài)多態(tài)性和動(dòng)態(tài)多態(tài)性。1、靜態(tài)多態(tài)性指在程序編譯時(shí)系統(tǒng)來決定調(diào)用的是哪個(gè)函數(shù)。實(shí)現(xiàn)方式——函數(shù)重載(包括運(yùn)算符重載)又稱編譯時(shí)的多態(tài)性76.1多態(tài)性

(二)多態(tài)的分類從系統(tǒng)實(shí)現(xiàn)的角度,多態(tài)性分為靜態(tài)多態(tài)性和動(dòng)態(tài)多態(tài)性。2、動(dòng)態(tài)多態(tài)性指在程序運(yùn)行過程中才動(dòng)態(tài)確定函數(shù)的調(diào)用。實(shí)現(xiàn)方式——虛函數(shù)又稱運(yùn)行時(shí)的多態(tài)性8例題例6.1例6.210本章內(nèi)容6.1多態(tài)性的概念6.2虛函數(shù)6.3純虛函數(shù)與抽象類6.2虛函數(shù)

6.2.2虛函數(shù)(一)定義虛函數(shù)就是在基類中被關(guān)鍵字virtual聲明,并在派生類中重新定義的成員函數(shù)。(二)虛函數(shù)的作用在派生類中重新定義與基類相同的函數(shù),當(dāng)通過基類指針來訪問基類和派生類對(duì)象的這個(gè)成員函數(shù)時(shí),將在運(yùn)行時(shí)來決定函數(shù)的調(diào)用。116.2虛函數(shù)

6.2.2虛函數(shù)(三)虛函數(shù)的一般使用方法1、在基類中用virtual聲明成員函數(shù)為虛函數(shù)。(類外定義時(shí)不必加virtual)2、在派生類中根據(jù)需要重新定義此函數(shù),但要求該函數(shù)的聲明形式和基類完全相同。3、定義一個(gè)基類的指針變量。4、當(dāng)基類的指針變量指向基類或派生類的對(duì)象,并調(diào)用該函數(shù)時(shí),調(diào)用的為當(dāng)前指向的對(duì)象的函數(shù)126.2虛函數(shù)虛函數(shù)同函數(shù)重載函數(shù)重載處理的是同一層面上的同名函數(shù)問題,是一種橫向重載虛函數(shù)處理的是基類和派生類層面上的同名函數(shù)問題,是一種縱向重載6.2.3靜態(tài)關(guān)聯(lián)和動(dòng)態(tài)關(guān)聯(lián)關(guān)聯(lián):確定調(diào)用函數(shù)的具體對(duì)象的過程。靜態(tài)關(guān)聯(lián):編譯時(shí)就能確定的關(guān)聯(lián)動(dòng)態(tài)關(guān)聯(lián):運(yùn)行時(shí)才能確定的關(guān)聯(lián)6.2虛函數(shù)

6.2.2虛函數(shù)(四)虛函數(shù)使用注意事項(xiàng)1、虛函數(shù)只能是類的成員函數(shù),不能是靜態(tài)成員函數(shù)和友元函數(shù),也不能是普通函數(shù)。2、析構(gòu)函數(shù)可以是虛函數(shù),但構(gòu)造函數(shù)不能是。3、基類的虛函數(shù)無論被繼承多少次,仍然為虛函數(shù)。156.2虛函數(shù)

6.2.2虛函數(shù)(六)在什么情況下使用虛函數(shù)1、成員函數(shù)所在的類會(huì)成為基類2、派生類中需要對(duì)該成員函數(shù)進(jìn)行修改3、派生類中通過指針或引用調(diào)用該成員函數(shù)166.2虛函數(shù)

6.2.3虛析構(gòu)函數(shù)當(dāng)派生類的對(duì)象從內(nèi)存中撤銷時(shí),一般先調(diào)用派生類的析構(gòu)函數(shù),然后再調(diào)用基類的析構(gòu)函數(shù)。閱讀6.3程序,找出其中的問題。176.2虛函數(shù)

6.2.3虛析構(gòu)函數(shù)定義格式virtual~類名(){

函數(shù)體;}注意:基類定義的是虛析構(gòu)函數(shù),派生類的析構(gòu)函數(shù)自動(dòng)為虛析構(gòu)函數(shù)。18實(shí)驗(yàn)九課后第3題時(shí)間:周二三單元練習(xí)練習(xí)題21本章內(nèi)容6.1多態(tài)性的概念6.2虛函數(shù)6.3純虛函數(shù)與抽象類抽象類引入抽象類不象具體類那樣描述一類具體事物,它是提取多種具有相似性的具體事物的共同特征而產(chǎn)生的抽象類是不能夠?qū)嵗念?,它的作用就是產(chǎn)生子類的同時(shí)給于子類一些特定的屬性和方法.例子:你的程序里面需要用到蘋果和梨這2個(gè)類,但是你會(huì)發(fā)現(xiàn)這2個(gè)類里面有共同的屬性和方法(屬性:都有核..方法:都能吃...)。建立抽象類“水果”把這些共同的東西都定義在那里.2個(gè)子類就只需要實(shí)現(xiàn)自己的東西(味道,價(jià)格...)優(yōu)點(diǎn):當(dāng)需要對(duì)蘋果和梨做共同的修改時(shí)候,直接對(duì)抽象類水果做就可以了抽象類引入抽象類的關(guān)鍵是抽象方法設(shè)計(jì)抽象方法的原因是在于抽象類自己沒有辦法實(shí)現(xiàn)這個(gè)方法,或者說在抽象類這一層,我們不知道如何實(shí)現(xiàn)這個(gè)方法,只有到了具體類才有辦法知道實(shí)現(xiàn)。

如:“動(dòng)物”這個(gè)抽象類,有一個(gè)抽象方法“吃”,但是動(dòng)物這個(gè)類是不能實(shí)現(xiàn)“吃這個(gè)方法的,因?yàn)楝F(xiàn)實(shí)中沒有一個(gè)純“動(dòng)物”的實(shí)例6.3純虛函數(shù)與抽象類在C++中的類族中,為了提供一個(gè)統(tǒng)一的訪問接口,往往會(huì)提供一個(gè)具有抽象意義的基類。例如:24幾何圖形Shape矩形Rectangle圓Circle三角形Triangle長方體Box圓柱Cylinder三棱柱T_Prism圓錐Cone6.3純虛函數(shù)與抽象類在C++中的類族中,為了提供一個(gè)統(tǒng)一的訪問接口,往往會(huì)提供一個(gè)具有抽象意義的基類。該抽象基類應(yīng)具有的特點(diǎn):1、描述該類族所有派生類的共性成員。2、不需要建立對(duì)象,只用于派生。3、為了實(shí)現(xiàn)動(dòng)態(tài)聯(lián)編,同樣需要定義虛函數(shù)。256.3純虛函數(shù)與抽象類6.3.1純虛函數(shù)(一)作用在基類中為其所有派生類提供一個(gè)公共接口,便于派生類根據(jù)需要重新定義。(二)定義格式virtual返回類型函數(shù)名(參數(shù)列表)=0;(三)與虛函數(shù)的區(qū)別沒有函數(shù)體,且所屬的類不能定義對(duì)象。266.3純虛函數(shù)與抽象類6.3.2抽象類與具體類含有純虛函數(shù)的類就稱為抽象類。特點(diǎn)不能聲明抽象類的對(duì)象,只能用于繼承;如果抽象類的派生類中沒有對(duì)純虛函數(shù)重新定義,則該類仍是抽象類。作用作為一個(gè)類族的共同基類,提供公共接口。27classShape{public:virtualfloatarea()const{return0.0;}//虛函數(shù)

virtualfloatvolume()const{return0.0;}//虛函數(shù)

virtualvoidshapeName()const=0;//純虛函數(shù)};classPoint:publicShape{public: Point(float=0,float=0){}virtualvoidshapeName()const{cout<<"Point:";}protected:floatx,y;};//聲明Circle類classCircle:publicPoint{public:Circle(floatx=0,floaty=0,floatr=0):Point(x,y) {radius=r;}virtualfloatarea()const{return3.14*radius*radius;}virtualvoidshapeName()const{cout<<"Circle:";}protected:floatradius;};classCylinder:publicCircle{public:Cylinder(floatx=0,floaty=0,floatr=0,floath=0):Circle(a,b,r),height(h){}virtualfloatarea()const{return2*Circle::area()+2*3.14*radius*height;}virtualfloatvolume()const{returnCircle::area()*height;}virtualvoidshapeName()const{cou

溫馨提示

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

評(píng)論

0/150

提交評(píng)論