




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
虛函數與多態性第一頁,共十六頁,編輯于2023年,星期三10.1虛函數虛函數必須是基類中的非靜態成員函數,其訪問控制權限可以設置為公共訪問控制或者是受保護訪問控制。用戶在程序中,使用虛函數主要是為了實現動態聯翩功能。換句話而言,也就是在程序中不包含虛函數的基類和派生類之間所實現的功能為靜態聯翩。在本節中,將向用戶主要介紹靜態聯翩與動態聯翩的區別及其使用方法等。第二頁,共十六頁,編輯于2023年,星期三10.1.1靜態聯翩靜態聯翩是指用戶在C++類繼承中,沒有在基類中聲明任何的虛成員函數。而對于基類或者是派生類中的成員函數,用戶只能創建相應的類實例對象去調用相應的類中的成員函數實現不同的功能。這樣,會使用戶在使用過程中,創建基類和派生類的多個實例對象,影響程序的可讀性以及造成代碼的冗余等。提示:用戶在程序中,實現靜態聯翩時,可以使用關鍵字“virtual”對基類成員函數進行聲明,也可以不使用該關鍵字對成員函數進行聲明。第三頁,共十六頁,編輯于2023年,星期三10.1.2動態聯翩在前一小節中,已經向用戶講解了靜態聯翩功能的實現。那么,在本小節中,將向用戶講解與之相反的動態聯翩功能。動態聯翩是指用戶可以將基類的指針對象指向其派生類中的任意一個實例,并且可以通過基類的指針對象對派生類中的成員函數進行調用。用戶在具體實現動態聯翩功能時,可以利用基類的指針對象調用派生類中所有權限的成員函數。包括私有訪問控制權限、受保護訪問控制權限以及公共訪問控制權限。換句話而言,也就是用戶可以通過動態聯翩功能訪問派生類中的私有成員函數或者成員變量。第四頁,共十六頁,編輯于2023年,星期三10.1.3虛基類用戶在進行程序編寫時,可能會從某個類中派生出不同的子類。如果這些子類又派生出同一個類。那么,在創建最后一層子類的實例對象時,程序會首先對基類進行實例對象的創建。這樣,就會同時產生多個基類的實例對象,會影響程序的運行效率。這時,用戶可以使用虛基類來解決這個問題,實現基類實例對象的唯一性。用戶在多個類之間實現繼承關系時,可以使用關鍵字“virtual”對繼承方式進行說明。第五頁,共十六頁,編輯于2023年,星期三10.1.4虛析構函數虛析構函數僅僅存在于繼承關系的基類中。換言之,基類中應該至少聲明一個虛析構函數,以便子類實例對象在刪除時,能夠對基類的實例對象也進行刪除操作或者是將基類中的相應的成員變量等進行刪除。在本小節中,將向用戶介紹虛析構函數的定義方法及其使用方法等。【本例代碼位置:源文件\10\虛析構函數\虛析構函數.cpp】第六頁,共十六頁,編輯于2023年,星期三10.1.5虛函數實例程序在前面的小節中,已經向用戶介紹并講解了關于虛函數的相關知識點。【實例10.3】用戶可以將前面的實例程序進行綜合,并查看代碼運行后的結果。第七頁,共十六頁,編輯于2023年,星期三10.2抽象類在C++語言中,抽象類是指該類中的成員函數并沒有具體的實現,而只是提供了一個相應的方法給其派生類進行使用。也就是說用戶可以在抽象類的派生類中對這些沒有進行實現的函數方法進行具體方法的實現。用戶可以使用抽象類將一些備用的函數方法進行封裝,以供派生類進行使用。因此,在本節中,將向用戶講解純虛函數、抽象類的實現方法及其使用方法等。第八頁,共十六頁,編輯于2023年,星期三10.2.1純虛函數純虛函數是指一個沒有具體功能實現的虛函數。在純虛函數中,其功能實現方法為空,利用這一特點,用戶可以在不同的派生類中使用相同的方法來實現不同的功能。純虛函數的基本格式如下所示:01 virtualvoidplay()=0; //純虛函數的定義在上面的代碼中,用戶使用關鍵字“virtual”對成員函數“play()”進行定義,表示該函數為虛函數。提示:C++類中的構造函數不能夠被定義為純虛函數。但是,類中的析構函數則可以被定義為純虛函數。這是因為構造函數是要對類的實例對象進行初始化操作的,所以不能夠被定義為虛擬類型。第九頁,共十六頁,編輯于2023年,星期三10.2.2創建抽象類指針對象在C++語言中,純虛函數是創建抽象類的基本組成部分。因此,在本小節中,將向用戶介紹如何在實例代碼中,實現抽象類的相關方法以及如何使用抽象類創建指針對象。1.實現抽象類在一個C++類中,如果有且至少包含一個純虛函數。那么,這個C++類就是一個抽象類。2.創建抽象類的指針對象用戶在前面已經封裝好了一個抽象類。那么,用戶就可以利用已封裝好的抽象類來創建一個指針對象對該類中的成員函數進行訪問。提示:在實際編程時,用戶不能夠創建一個抽象類的實例對象,而只能夠創建抽象類的指針對象。第十頁,共十六頁,編輯于2023年,星期三10.2.3抽象類派生新類在C++語言中,抽象類派生新類的相關操作與普通基類是相同的。只是抽象類的派生類可以繼承其基類中的純虛函數去實現具體的一些功能。那么,在本小節中,將通過實例代碼的編寫向用戶介紹如何從抽象類中派生新類。例如,用戶封裝一個抽象類,并從該類中分別派生類兩個子類。具體的代碼如下所示:【本例代碼位置:源文件\10\抽象類派生新類\抽象類派生新類.cpp】第十一頁,共十六頁,編輯于2023年,星期三10.2.4實例分析通過前面小節的相關知識的學習,用戶已經對抽象類的相關操作等有了深入的理解。因此,在本小節中將結合前面已經介紹過的知識進行實例代碼的編寫,并且對這些實例代碼進行詳細的講解。【實例10.4】用戶首先在程序中封裝一個抽象類,類名為“student”。并且在該類中,將相關的函數方法都定義為純虛函數,以便其派生類能夠利用相同的方法實現不同的功能。第十二頁,共十六頁,編輯于2023年,星期三10.3多態性C++語言的多態性是建立在C++繼承機制的基礎上的一個很重要的知識點。用戶在實際進行編程時,只有首先在兩個類之間實現了繼承關系,才能夠進行C++多態性的程序編寫。C++多態性是將基類中的虛函數派生到派生類中,而派生類會在該函數中實現不同的功能。這樣,用戶在多態性編程中,就會涉及到多態性接口的繼承以及實現等操作。那么,在本節中,將向用戶介紹C++多態性接口方法的繼承及其實現等相關的知識。第十三頁,共十六頁,編輯于2023年,星期三10.3.1繼承多態性接口多態性接口是指用戶可以在派生類中定義與基類中虛函數同名的成員函數。而在派生類中,用戶可以在與基類中虛函數同名的成員函數中實現不同的功能。如果含有虛函數的基類有多個派生類。那么,基類中的虛函數方法就為不同的派生類提供了一個統一的接口。在本小節中,將向用戶介紹如何繼承多態性接口的方法。例如,用戶在實例程序中,首先封裝一個類作為基類,并且在該基類中定義相應的虛函數。然后,從該基類中派生類兩個派生類,并使用基類中的虛函數作為統一的接口,實現不同的功能。第十四頁,共十六頁,編輯于2023年,星期三10.3.2實現多態性接口在前面一小節中,已經向用戶介紹了如何實現多態性接口的繼承操作。那么,在本小節中,將向用戶介紹如何實現已經繼承的多態性接口的相關功能的方法。【實例10.5】例如,用戶可以在VC++編譯器中繼續編寫實現多態性接口的相關功能代碼。第十五頁,共十六頁,編輯于2023年,星期三10.4小結在本章中,主要向用戶介紹了虛函數、抽象類以及多態性接口等相關的知識。對于用戶在實際編寫程序時,都會經常使用到虛函數。在實例代碼中,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論