




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第8章繼承、虛函數與多態性第8章繼承、虛函數與多態性1【本章學習要點】1.掌握單繼承的定義、繼承方式與訪問控制;2.了解多繼承的定義和應用;3.掌握虛函數的定義和作用;4.了解多態性。【本章學習要點】1.掌握單繼承的定義、繼承方式與訪問控制;2第8章繼承、虛函數與多態性8.1單繼承8.2多繼承8.3虛函數8.4多態性第8章繼承、虛函數與多態性8.1單繼承3繼承是面向對象程序設計的基本特征之一,是從已有的類基礎上建立新類。繼承性是面向對象程序設計支持代碼重用的重要機制。面向對象程序設計的繼承機制提供了無限重復利用程序資源的一種途徑。繼承是面向對象程序設計的基本特征之一,是從已有的類基礎上建立48.1單繼承繼承是類之間定義的一種重要關系。定義類B時,自動得到類A的操作和數據屬性,使得程序員只需定義類A中沒有的新成分就可完成在類B的定義,這樣稱類B繼承了類A,類A派生了類B,A是基類(父類),B是派生類(子類)。這種機制稱為繼承。8.1單繼承繼承是類之間定義的一種重要關系。定義類B時58.1單繼承8.1.1派生類的定義派生類定義的一般形式如下:
class<派生類名>:<繼承方式><基類>{ 成員 };<繼承方式>有三種,分別是公有繼承(public)、保護繼承(protected)和私有繼承(private),如定義時沒有指明,則默認為私有繼承(private)。8.1單繼承8.1.1派生類的定義68.1單繼承8.1.2訪問控制類成員的訪問控制分為公有、保護和私有三種。公有成員可以通過類的對象或類域范圍內的成員函數來訪問,而保護和私有成員只能由類域范圍內的成員函數訪問。8.1單繼承8.1.2訪問控制78.1單繼承派生類中的成員既包括自身定義的,也包括從基類繼承得到的。前者的訪問控制和一般類中成員的訪問控制一樣,對于后者(即從基類繼承得到的成員)的訪問控制,我們須搞清楚兩個方面:8.1單繼承派生類中的成員既包括自身定義的,也包括從基類88.1單繼承(續)1.派生類的成員函數對基類成員的訪問控制。(1)派生類的成員函數可以直接訪問基類的公有和保護成員。(2)派生類的成員函數不能訪問基類的私有成員。8.1單繼承(續)1.派生類的成員函數對基類成員的訪問98.1單繼承2.派生類的對象對基類成員的訪問控制。類成員的訪問控制不是用來限制類本身的成員函數對其數據成員的訪問的,而是用來限制在類域之外的程序通過類的對象來訪問類的成員的。基類成員在派生類中的訪問控制是由其在基類中訪問控制和繼承方式共同決定的,具體情況見下表:8.1單繼承2.派生類的對象對基類成員的訪問控制。108.1單繼承表8.1繼承方式對派生類中基類訪問控制的影響
8.1單繼承表8.1繼承方式對派生類中基類訪問控制的影118.1單繼承(1)公有繼承(public)公有繼承時,基類成員在派生類的訪問控制保存不變,派生類的對象可以訪問基類中的公有成員,派生類的成員函數可以訪問基類中的公有成員和保護成員,不能訪問基類中的私有成員。這里一定要區分清楚,派生類的對象和派生類中的成員函數對基類成員的訪問是不同的。8.1單繼承(1)公有繼承(public)128.1單繼承(2)保護繼承(protected)保護繼承時,基類中公有成員和保護成員都成為派生類的保護成員,只能被它的派生類成員函數訪問,基類的私有成員仍然是私有的,不能被派生類的成員函數和其對象訪問。8.1單繼承(2)保護繼承(protected)138.1單繼承(3)私有繼承(private)在私有繼承時,基類的成員只能由直接派生類訪問,而無法再往下繼承。也就是說基類中公有成員和保護成員作為派生類的私有成員時,不能被這個派生類的子類訪問。8.1單繼承(3)私有繼承(private)148.1單繼承8.1.3域運算符::如果派生類定義了與基類同名的成員,若要在派生類中使用基類同名成員,可以用域運算符加以指定。使用格式如下: 類名::成員8.1單繼承8.1.3域運算符::158.1單繼承8.1.4構造函數與析構函數的執行順序當一個類是派生類,而且有對象成員時,它的構造函數的執行順序是這樣的:先調用基類的構造函數,再調用對象成員的構造函數,最后才調用這個類自己的構造函數。這樣的順序能夠保證對象正確地構造。8.1單繼承8.1.4構造函數與析構函數的執行順序168.1單繼承而對象結束生存期時,要調用析構函數來釋放對象的資源,這時析構函數的調用順序正好與構造函數相反:先調用派生類的析構函數,再調用對象成員的析構函數,最后才調用基類的析構函數。這樣的順序也是為了保證對象能夠正確地被釋放。8.1單繼承而對象結束生存期時,要調用析構函數來釋放對象178.1單繼承8.1.5基類與派生類的關系1.派生類是基類的具體化。2.派生類是基類定義的延續。3.派生類是基類的組合。8.1單繼承8.1.5基類與派生類的關系188.2多繼承8.2.1多繼承的定義當一個類從多個類派生而來時,就稱為多繼承。多繼承時派生類定義的形式如下:class<派生類名>:<繼承方式><基類>【,<繼承方式><基類>】{ 成員};8.2多繼承8.2.1多繼承的定義198.2多繼承8.2.1多繼承的定義當一個類從多個類派生而來時,就稱為多繼承。多繼承時派生類定義的形式如下:class<派生類名>:<繼承方式><基類>【,<繼承方式><基類>】{ 成員};8.2多繼承8.2.1多繼承的定義208.2多繼承8.2.2虛基類一個類可以多次作為另一個類的間接基類,但C++規定,一個類不能多次作為另一個類的直接基類,所以下面的定義錯誤的: classD:publicB,publicB{ …… };8.2多繼承8.2.2虛基類218.2多繼承當一個類多次間接從一個類派生以后,這個類就保留多份間接基類的成員。在大多數情況下,我們希望這個派生類只保留一份基類的成員。這時可以定義虛基類實現:classPerson{…};classTeacher:virtualpublicPerson{…};classStudent:virtualpublicPerson{…};classTeacherAssiant:publicTeacher,publicStudent{…};8.2多繼承當一個類多次間接從一個類派生以后,這個類就保228.3虛函數8.3.1虛函數的定義虛函數是在基類中冠以關鍵字virtual的成員函數。虛函數是成員函數,而且是非static的成員函數。它提供了一種接口界面,并且可以在一個或多個派生類中被重定義。說明虛函數的方法如下:virtual<類型說明符><函數名>(<參數表>)8.3虛函數8.3.1虛函數的定義238.3虛函數8.3.2虛函數的使用聯編是指一個計算機程序彼此關聯的過程。按照聯編所進行的階段不同,可分為兩種:靜態聯編和動態聯編。靜態聯編是指聯編工作出現在編譯連接階段,這種聯編又稱早期聯編,因為這種聯編過程是在程序開始運行之前完成的。編譯程序在編譯階段并不能確切知道將要調用的函數,只有在程序執行時才能確定將要調用的函數,這種聯編稱為動態聯編,又稱晚期聯編。8.3虛函數8.3.2虛函數的使用248.3虛函數如果某類中的一個成員函數被說明為虛函數,這就意味著該成員函數在派生類中可能有不同的實現。當使用這個成員函數操作指針或引用所標識對象時,對該成員函數調用采用動態聯編方式,即在運行時進行關聯或綁定。動態聯編只能通過指針或引用標識對象來操作虛函數。如果采用一般類型的標識對象來操作虛函數,則將采用靜態聯編方式調用虛函數。8.3虛函數如果某類中的一個成員函數被說明為虛函數,這就258.3虛函數8.3.3純虛函數在許多情況下,在基類中不能給出有意義的虛函數定義,這時可以把它說明成純虛函數,把它的定義留給派生類來做。定義純虛函數的一般形式如下:class類名{ virtual返回值類型函數名(參數表)=0;};8.3虛函數8.3.3純虛函數268.3虛函數純虛函數是一個在基類中說明的虛函數,它在基類中沒有定義,要求任何派生類都定義自己的版本。純虛函數為各派生類提供一個公共界面。由于純虛函數所在的類中沒有它的定義,在該類的構造函數和析構函數中不允許調用純虛函數,否則會導致程序運行錯誤。但其他成員函數可以調用純虛函數。8.3虛函數純虛函數是一個在基類中說明的虛函數,它在基類278.4多態性多態性是由C++在編譯時和運行時支持的。編譯時多態性是由重載函數和重載運算符支持的。運行時多態性則是通過使用繼承和虛函數完成的。8.4多態性多態性是由C++在編譯時和運行時支持的。編譯28第8章繼承、虛函數與多態性第8章繼承、虛函數與多態性29【本章學習要點】1.掌握單繼承的定義、繼承方式與訪問控制;2.了解多繼承的定義和應用;3.掌握虛函數的定義和作用;4.了解多態性。【本章學習要點】1.掌握單繼承的定義、繼承方式與訪問控制;30第8章繼承、虛函數與多態性8.1單繼承8.2多繼承8.3虛函數8.4多態性第8章繼承、虛函數與多態性8.1單繼承31繼承是面向對象程序設計的基本特征之一,是從已有的類基礎上建立新類。繼承性是面向對象程序設計支持代碼重用的重要機制。面向對象程序設計的繼承機制提供了無限重復利用程序資源的一種途徑。繼承是面向對象程序設計的基本特征之一,是從已有的類基礎上建立328.1單繼承繼承是類之間定義的一種重要關系。定義類B時,自動得到類A的操作和數據屬性,使得程序員只需定義類A中沒有的新成分就可完成在類B的定義,這樣稱類B繼承了類A,類A派生了類B,A是基類(父類),B是派生類(子類)。這種機制稱為繼承。8.1單繼承繼承是類之間定義的一種重要關系。定義類B時338.1單繼承8.1.1派生類的定義派生類定義的一般形式如下:
class<派生類名>:<繼承方式><基類>{ 成員 };<繼承方式>有三種,分別是公有繼承(public)、保護繼承(protected)和私有繼承(private),如定義時沒有指明,則默認為私有繼承(private)。8.1單繼承8.1.1派生類的定義348.1單繼承8.1.2訪問控制類成員的訪問控制分為公有、保護和私有三種。公有成員可以通過類的對象或類域范圍內的成員函數來訪問,而保護和私有成員只能由類域范圍內的成員函數訪問。8.1單繼承8.1.2訪問控制358.1單繼承派生類中的成員既包括自身定義的,也包括從基類繼承得到的。前者的訪問控制和一般類中成員的訪問控制一樣,對于后者(即從基類繼承得到的成員)的訪問控制,我們須搞清楚兩個方面:8.1單繼承派生類中的成員既包括自身定義的,也包括從基類368.1單繼承(續)1.派生類的成員函數對基類成員的訪問控制。(1)派生類的成員函數可以直接訪問基類的公有和保護成員。(2)派生類的成員函數不能訪問基類的私有成員。8.1單繼承(續)1.派生類的成員函數對基類成員的訪問378.1單繼承2.派生類的對象對基類成員的訪問控制。類成員的訪問控制不是用來限制類本身的成員函數對其數據成員的訪問的,而是用來限制在類域之外的程序通過類的對象來訪問類的成員的。基類成員在派生類中的訪問控制是由其在基類中訪問控制和繼承方式共同決定的,具體情況見下表:8.1單繼承2.派生類的對象對基類成員的訪問控制。388.1單繼承表8.1繼承方式對派生類中基類訪問控制的影響
8.1單繼承表8.1繼承方式對派生類中基類訪問控制的影398.1單繼承(1)公有繼承(public)公有繼承時,基類成員在派生類的訪問控制保存不變,派生類的對象可以訪問基類中的公有成員,派生類的成員函數可以訪問基類中的公有成員和保護成員,不能訪問基類中的私有成員。這里一定要區分清楚,派生類的對象和派生類中的成員函數對基類成員的訪問是不同的。8.1單繼承(1)公有繼承(public)408.1單繼承(2)保護繼承(protected)保護繼承時,基類中公有成員和保護成員都成為派生類的保護成員,只能被它的派生類成員函數訪問,基類的私有成員仍然是私有的,不能被派生類的成員函數和其對象訪問。8.1單繼承(2)保護繼承(protected)418.1單繼承(3)私有繼承(private)在私有繼承時,基類的成員只能由直接派生類訪問,而無法再往下繼承。也就是說基類中公有成員和保護成員作為派生類的私有成員時,不能被這個派生類的子類訪問。8.1單繼承(3)私有繼承(private)428.1單繼承8.1.3域運算符::如果派生類定義了與基類同名的成員,若要在派生類中使用基類同名成員,可以用域運算符加以指定。使用格式如下: 類名::成員8.1單繼承8.1.3域運算符::438.1單繼承8.1.4構造函數與析構函數的執行順序當一個類是派生類,而且有對象成員時,它的構造函數的執行順序是這樣的:先調用基類的構造函數,再調用對象成員的構造函數,最后才調用這個類自己的構造函數。這樣的順序能夠保證對象正確地構造。8.1單繼承8.1.4構造函數與析構函數的執行順序448.1單繼承而對象結束生存期時,要調用析構函數來釋放對象的資源,這時析構函數的調用順序正好與構造函數相反:先調用派生類的析構函數,再調用對象成員的析構函數,最后才調用基類的析構函數。這樣的順序也是為了保證對象能夠正確地被釋放。8.1單繼承而對象結束生存期時,要調用析構函數來釋放對象458.1單繼承8.1.5基類與派生類的關系1.派生類是基類的具體化。2.派生類是基類定義的延續。3.派生類是基類的組合。8.1單繼承8.1.5基類與派生類的關系468.2多繼承8.2.1多繼承的定義當一個類從多個類派生而來時,就稱為多繼承。多繼承時派生類定義的形式如下:class<派生類名>:<繼承方式><基類>【,<繼承方式><基類>】{ 成員};8.2多繼承8.2.1多繼承的定義478.2多繼承8.2.1多繼承的定義當一個類從多個類派生而來時,就稱為多繼承。多繼承時派生類定義的形式如下:class<派生類名>:<繼承方式><基類>【,<繼承方式><基類>】{ 成員};8.2多繼承8.2.1多繼承的定義488.2多繼承8.2.2虛基類一個類可以多次作為另一個類的間接基類,但C++規定,一個類不能多次作為另一個類的直接基類,所以下面的定義錯誤的: classD:publicB,publicB{ …… };8.2多繼承8.2.2虛基類498.2多繼承當一個類多次間接從一個類派生以后,這個類就保留多份間接基類的成員。在大多數情況下,我們希望這個派生類只保留一份基類的成員。這時可以定義虛基類實現:classPerson{…};classTeacher:virtualpublicPerson{…};classStudent:virtualpublicPerson{…};classTeacherAssiant:publicTeacher,publicStudent{…};8.2多繼承當一個類多次間接從一個類派生以后,這個類就保508.3虛函數8.3.1虛函數的定義虛函數是在基類中冠以關鍵字virtual的成員函數。虛函數是成員函數,而且是非static的成員函數。它提供了一種接口界面,并且可以在一個或多個派生類中被重定義。說明虛函數的方法如下:virtual<類型說明符><函數名>(<參數表>)8.3虛函數8.3.1虛函數的定義518.3虛函數8.3.2虛函數的使用聯編是指一個計算機程序彼此關聯的過程。按照聯編所進行的階段不同,可分
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45461-2025碳纖維復合材料測試試樣用加強片粘貼規程
- 中學課程深化改革計劃
- 證券從業資格證新興市場分析試題及答案
- 項目管理專業資格考綱剖析試題及答案
- 銀行機構傳承與創新管理思路試題及答案
- 學習法律知識提高注冊會計師考試合規性試題及答案
- 學習科研對注冊會計師考試備考的重要性探討試題及答案
- 培訓學校課題申報書
- 2025年證券從業資格證知識便簽試題及答案
- 2025年證券從業資格證知識更新與討論試題及答案
- 2024年司法考試歷年真題答案
- 2025年南昌市高三語文二模檢測試卷附答案解析
- 2025年03月湖南懷化市新晃侗族自治縣事業單位工作人員10人筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- DB32-T 5085-2025 無機涂料應用技術規程
- 用“魔法”打敗“魔法”課件-2024-2025學年高二下學期班主任工作經驗分享
- 2025屆高考物理一輪復習:人教版(2019)高中物理必修第二冊基礎知識自測填空練習題(含答案)
- 《陸上風力發電機組混凝土塔架生產技術規程》編制說明
- 酒店新員工安全知識培訓
- (高清版)DB11∕T1191.3-2024實驗室危險化學品安全管理要求 第3部分:科研單位
- 種子輪融資合同協議范本
- 2025年安陽職業技術學院單招職業技能測試題庫有答案
評論
0/150
提交評論