21天學(xué)通C++-第十二章-多態(tài)_第1頁
21天學(xué)通C++-第十二章-多態(tài)_第2頁
21天學(xué)通C++-第十二章-多態(tài)_第3頁
21天學(xué)通C++-第十二章-多態(tài)_第4頁
21天學(xué)通C++-第十二章-多態(tài)_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第十二講:多態(tài),楊章偉 e-mail:,課程內(nèi)容安排,多態(tài)的概念 函數(shù)重載 虛函數(shù) 抽象類 綜合練習(xí) 思考和習(xí)題,多態(tài),類的多態(tài)特性是支持面向?qū)ο蟮恼Z言最主要的特性 ,多態(tài)性是指不同對(duì)象接收到相同消息時(shí),根據(jù)對(duì)象類的不同產(chǎn)生不同的動(dòng)作。多態(tài)性提供了同一個(gè)接口可以用多種方法進(jìn)行調(diào)用的機(jī)制,從而可以通過相同的接口訪問不同的函數(shù)。具體地說,就是同一個(gè)函數(shù)名稱,作用在不同的對(duì)象上將產(chǎn)生不同的操作。 繼承是面向?qū)ο蟮囊粋€(gè)重要特征。根據(jù)派生類所擁有的基類數(shù)目不同,可以分為單繼承和多繼承。一個(gè)類只有一個(gè)直接基類時(shí),稱為單繼承;而一個(gè)類同時(shí)有多個(gè)直接基類時(shí),則稱為多繼承,如圖11-1所示。,多態(tài)的含義,簡單來

2、說,多態(tài)就是“一個(gè)接口,多種實(shí)現(xiàn)”,就是同一種事物表現(xiàn)出的多種形態(tài)。例如,一個(gè)人跟隨旅游團(tuán)去北京,其只要跟著旅游團(tuán)去即可,至于如何去,是坐火車、坐飛機(jī)還是其他方式,這由旅游團(tuán)來實(shí)現(xiàn),如圖12-1所示。,多態(tài)的作用,可以利用多態(tài)的特征,用統(tǒng)一的標(biāo)識(shí)來完成這些功能。這樣,就可以達(dá)到類的行為的再抽象,進(jìn)而統(tǒng)一標(biāo)識(shí),減少程序中標(biāo)識(shí)符的個(gè)數(shù)。 例如,下圖12-2表示的是求兩個(gè)數(shù)最大值的多種表示,其實(shí)這些表示都可以通過一個(gè)統(tǒng)一的標(biāo)識(shí)來表示。,函數(shù)重載,事實(shí)上,函數(shù)的重載也稱多態(tài)函數(shù),是實(shí)現(xiàn)編譯時(shí)的多態(tài)性的形式之一。其使程序能用同一個(gè)名字來訪問一組相關(guān)的函數(shù),提高了程序的靈活性。函數(shù)重載時(shí),函數(shù)名相同,但函

3、數(shù)所帶的參數(shù)個(gè)數(shù)或數(shù)據(jù)類型不同,編譯系統(tǒng)會(huì)根據(jù)參數(shù)來決定調(diào)用哪個(gè)同名的函數(shù)。 面向?qū)ο蟪绦蛟O(shè)計(jì)中,函數(shù)的重載表現(xiàn)為兩種情況: 第一種是參數(shù)個(gè)數(shù)或類型有所差別的重載, 第二種是函數(shù)的參數(shù)完全相同但屬于不同的類。,虛函數(shù),虛函數(shù)是重載的另一種形式,實(shí)現(xiàn)的是動(dòng)態(tài)的重載,即函數(shù)調(diào)用與函數(shù)體之間的聯(lián)系是在運(yùn)行時(shí)才建立,也就是動(dòng)態(tài)聯(lián)編。前面的內(nèi)容也提到了,虛函數(shù)是實(shí)現(xiàn)運(yùn)行時(shí)的多態(tài),即動(dòng)態(tài)多態(tài)性的一個(gè)重要方式。,定義虛函數(shù),虛函數(shù)的定義是在基類中進(jìn)行的,即把基類中需要定義為虛函數(shù)的成員函數(shù)聲明為virtual。當(dāng)基類中的某個(gè)成員函數(shù)被聲明為虛函數(shù)后,其就可以在派生類中被重新定義。在派生類中重新定義時(shí),其函數(shù)

4、原型,包括返回類型、函數(shù)名、參數(shù)個(gè)數(shù)和類型、參數(shù)的順序都必須與基類中的原型完全一致。一般來說,虛函數(shù)定義的形式為: virtual (參數(shù)表) 函數(shù)體 ,使用虛函數(shù),事實(shí)上,讀者可以看出,在派生類中被重新定義的基類中的虛函數(shù),是函數(shù)重載的另一種形式,但其與函數(shù)重載又有如下的區(qū)別:一般的函數(shù)重載,要求其函數(shù)的參數(shù)或參數(shù)類型必須有所不同,函數(shù)的返回類型也可以不同,但重載一個(gè)虛函數(shù)時(shí),要求函數(shù)名、返回類型、參數(shù)個(gè)數(shù)、參數(shù)的類型和參數(shù)的順序必須與基類中的虛函數(shù)的原型完全相同。 如果僅返回類型不同,其余相同,則系統(tǒng)會(huì)給出錯(cuò)誤信息; 如果函數(shù)名相同,而參數(shù)個(gè)數(shù)、參數(shù)的類型或參數(shù)的順序不同,系統(tǒng)認(rèn)為是普通的

5、函數(shù)重載,虛函數(shù)的特性將丟失。,抽象類,抽象類是一種特殊的類,其為一族類提供統(tǒng)一的操作界面,建立抽象類就是為了通過它多態(tài)地使用其中的成員函數(shù),抽象類是帶有純虛函數(shù)的類。,純虛函數(shù),當(dāng)在基類中不能為虛函數(shù)給出一個(gè)有意義的實(shí)現(xiàn)時(shí),可以將其聲明為純虛函數(shù),其實(shí)現(xiàn)留待派生類完成,純虛函數(shù)的作用是為派生類提供一個(gè)一致的接口。 一般來說,一個(gè)抽象類帶有至少一個(gè)純虛函數(shù)。純虛函數(shù)是在一個(gè)基類中說明的虛函數(shù),它在該基類中沒有具體的操作內(nèi)容,要求各派生類在重新定義時(shí)根據(jù)自己的需要定義實(shí)際的操作內(nèi)容。 純虛函數(shù)的一般定義形式為: virtual(參數(shù)表)=0,綜合練習(xí),該范例使用抽象類和純虛函數(shù)來訪問數(shù)據(jù)結(jié)構(gòu)中的隊(duì)列和堆棧,隊(duì)列是一個(gè)先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),而堆棧是一個(gè)后進(jìn)先出的數(shù)據(jù)結(jié)構(gòu)。,思考和習(xí)題,如何理解多態(tài)? 在面向?qū)ο蟪绦蛟O(shè)計(jì)中,函數(shù)的重載有兩種形式,其分別是哪兩種? 虛函數(shù)是重載的另一種形式,實(shí)現(xiàn)的是動(dòng)態(tài)的重載

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論