下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第四章繼承提綱2023/1/291派生類的構(gòu)造函數(shù)與析構(gòu)函數(shù)132繼承方式類的繼承與派生4虛基類5聚合類6繼承應(yīng)用實(shí)例
4.1類的繼承與派生繼承是軟件重用的一種形式。繼承是將自然界中存在的普遍和特殊關(guān)系用程序設(shè)計(jì)的方式進(jìn)行分類描述在設(shè)計(jì)新類時(shí),允許重用某個(gè)原有類的所有特征,并在此基礎(chǔ)上添加新類的新特征被重用的原有類稱為基類baseclass新創(chuàng)建的類稱為派生類derivedclass。派生類不會(huì)影響到原有類的結(jié)構(gòu)。2023/1/292
4.1類的繼承與派生某一小型公司的實(shí)例:2023/1/293企業(yè)員工工作編號(hào)姓名……顯示企業(yè)員工信息計(jì)算實(shí)際發(fā)放工資……行政人員(與企業(yè)員工類相同)計(jì)算實(shí)際發(fā)放工資……經(jīng)理公司總銷售額提成比例(其余同企業(yè)員工類)計(jì)算實(shí)際發(fā)放工資……銷售人員個(gè)人銷售額提成比例(其余同企業(yè)員工類)計(jì)算實(shí)際發(fā)放工資……4.1類的繼承與派生針對(duì)該公司的情況:先設(shè)計(jì)一個(gè)一般員工類panyStaff,代表員工的共性;讓三個(gè)新類分別繼承一般員工類panyStaff,然后根據(jù)各自的差異性,新類可以對(duì)繼承來(lái)的內(nèi)容進(jìn)行改造。2023/1/2944.1類的繼承與派生派生類的定義從已有類產(chǎn)生新類的過(guò)程就是類的派生。定義語(yǔ)法如下:
class<派生類名><繼承方式>:<基類名1>, <繼承方式>:<基類名2>…{ <派生類成員的定義>; }2023/1/295繼承方式分為三種關(guān)鍵字:public、private和protected;單繼承(只有一個(gè)基類名)和多繼承;該公司情況類代碼:panyStaff.h企業(yè)員工類相關(guān)派生類經(jīng)理、銷售人員、行政人員這三個(gè)派生類在聲明語(yǔ)句中分別指定了它們的基類panyStaff,以及它們的繼承方式-public;CSaleManager類,同時(shí)繼承經(jīng)理類Cmanager和銷售人員類Csaleman;CSalesmanager.h2023/1/2964.1類的繼承與派生繼承的級(jí)別增加行政主管一職,員工關(guān)系圖如下:2023/1/297銷售員經(jīng)理行政主管行政人員企業(yè)員工類圖4.1類的繼承與派生用C++語(yǔ)言描述三個(gè)類的前向引用聲明,形成了一個(gè)“類家族”:classpanyStaff;//基類員工//派生類行政人員繼承員工classCAdminStaff:publicpanyStaff;//派生類行政主管繼承行政人員classCForeAdmin:publicCAdminStaff;2023/1/2984.2繼承方式基類不受派生類變化的影響派生類繼承了基類的全部數(shù)據(jù)成員和除了構(gòu)造函數(shù)析構(gòu)函數(shù)之外的全部成員函數(shù)但是派生類能否訪問(wèn)基類成員還要受繼承方式的約束類的繼承方式有:public、private和protected三種,其中private是缺省的繼承方式;2023/1/2994.2繼承方式public公有繼承:基類各成員的訪問(wèn)權(quán)限如果是public或protected,則在派生類中保持不變。而基類中的private成員對(duì)派生類不可見(jiàn),如圖:2023/1/29104.1類的繼承與派生2023/1/2911主講教師:四川大學(xué)計(jì)算機(jī)學(xué)院
private基類Base圖3.3公有繼承中的訪問(wèn)控制protectedpublicprivate派生類Derv:publicBaseprotectedpublicDervobjDBaseobjB4.1類的繼承與派生例4.1一個(gè)公有繼承的例子:sclass3_1.h
sclass3_1.cpp
smain3_1.cpp類A的所有成員在派生類中的訪問(wèn)控制權(quán)限都保持不變。
2023/1/29124.1類的繼承與派生private私有繼承:私有繼承下,基類各成員無(wú)論是何種訪問(wèn)權(quán)限在派生類中一律以private的身份出現(xiàn)派生類的對(duì)象也無(wú)法訪問(wèn),只有派生類的函數(shù)能在類內(nèi)訪問(wèn)它們。私有繼承后的基類成員成為了派生類的私有成員,實(shí)際上相當(dāng)于終止了基類功能的繼續(xù)派生2023/1/29134.2繼承方式如果希望私有繼承來(lái)的某些基類的成員函數(shù)在派生類中也能對(duì)外可見(jiàn),就需要在派生類中對(duì)這些成員公有化class<派生類名>:private<基類名>{public: using<基類名>::<基類函數(shù)名>;//公有化
……};2023/1/29144.2繼承方式例4.2私有繼承中的公有化:sclass3_2.hsmain3_2.cppusingCAnimal::SetWeight;//在派生類中將基類的成員函數(shù)SetWeight()公有化
usingCAnimal::GetWeight;//在派生類中將基類的成員函數(shù)GetWeight()公有化2023/1/29154.2繼承方式protected保護(hù)繼承:protected繼承會(huì)將基類中的public成員進(jìn)行
“降權(quán)”,修改成為protected,相當(dāng)于在派生類中引入了protected成員。不會(huì)降低基類的protected
成員權(quán)限。在派生類中可以調(diào)用基類類的protected和public成員,派生類的子類也可以調(diào)用被protected繼承的基類的protected和public成員。例4.3保護(hù)權(quán)限舉例:sclass3_3.hsmain3_3.cpp2023/1/29164.2繼承方式protected保護(hù)繼承下,基類各成員的訪問(wèn)權(quán)限(除private外)都以protected權(quán)限出現(xiàn);比較私有繼承和保護(hù)繼承,可以看出在直接派生類中兩者的效果實(shí)際上都相同,但如果再繼續(xù)派生下去就會(huì)出現(xiàn)區(qū)別;2023/1/29174.2繼承方式假設(shè)有A<-B<-C這樣一個(gè)繼承順序如果B私有繼承A后又派生出C,那么C就無(wú)法再間接繼承A的成員,對(duì)A功能的繼承在B那兒就終止了;如果B保護(hù)繼承A后又派生出C,那么A中的公有和保護(hù)成員在B中都是保護(hù)成員,因此A的功能可以被C間接繼承;在實(shí)際開(kāi)發(fā)時(shí)選擇恰當(dāng)?shù)睦^承方式;2023/1/29184.2繼承方式多繼承(多個(gè)父類):聲明多繼承的語(yǔ)法如下:class<派生類名>:<繼承方式><基類名1>,<繼承方式><基類名2>,…2023/1/29194.2繼承方式多繼承舉例:在公司員工管理中有時(shí)會(huì)存在多繼承關(guān)系,如圖:2023/1/2920經(jīng)理銷售部經(jīng)理銷售人員4.3派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)構(gòu)造函數(shù):在創(chuàng)建派生類的對(duì)象時(shí),系統(tǒng)直接執(zhí)行派生類的構(gòu)造函數(shù)而不會(huì)自動(dòng)執(zhí)行基類的構(gòu)造函數(shù);在設(shè)計(jì)派生類的構(gòu)造函數(shù)時(shí),不僅要為初始化派生類新增加的數(shù)據(jù)提供參數(shù),而且還應(yīng)為初始化基類數(shù)據(jù)成員提供參數(shù)2023/1/29214.3派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)相關(guān)語(yǔ)法:<派生類名>(<形參表>):<基類名1>(<形參表1>)<基類名2>(<形參表2>) {<派生類新增數(shù)據(jù)成員的初始化> }2023/1/29224.3派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)派生類構(gòu)造函數(shù)的調(diào)用順序?yàn)橄雀篙?基類數(shù)據(jù))后自己(派生類新數(shù)據(jù));轎車具有交通工具的一般特征,比如輪胎數(shù)目,同時(shí)又具有轎車自身的特征,如載客人數(shù),因此轎車?yán)^承交通工具,成為它的一個(gè)派生類。例4.4派生類構(gòu)造函數(shù)舉例:sclass3_4.hsmain3_4.cpp2023/1/29234.3派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)派生類必須定義構(gòu)造函數(shù)的兩種情況:派生類新增的數(shù)據(jù)成員需要定義構(gòu)造函數(shù)來(lái)為其初始化;基類定義了帶參數(shù)的構(gòu)造函數(shù)需要派生類為其提供參數(shù)以完成基類數(shù)據(jù)成員的初始化。2023/1/29244.3派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)析構(gòu)函數(shù)當(dāng)派生類對(duì)象消亡時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)用派生類的析構(gòu)函數(shù)做一些必要的清理工作;由于在繼承過(guò)程中派生類不能繼承基類的析構(gòu)函數(shù),所以如果需要就只能在派生類中重新定義;2023/1/29254.3派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)在執(zhí)行派生類的析構(gòu)函數(shù)時(shí)基類的析構(gòu)函數(shù)也將被自動(dòng)調(diào)用;析構(gòu)函數(shù)調(diào)用的順序是先派生類的析構(gòu)函數(shù),然后是基類的析構(gòu)函數(shù)。例4.5派生類析構(gòu)函數(shù)舉例:sclass3_5.hsmain3_5.cpp2023/1/2926調(diào)用類A的構(gòu)造函數(shù)調(diào)用類B的構(gòu)造函數(shù)調(diào)用類B的析構(gòu)函數(shù)調(diào)用類A的析構(gòu)函數(shù)2023/1/29274.4虛基類聲明一個(gè)虛基類多繼承中的多義性 2023/1/29282023/1/2929AFunc()BCD該關(guān)系的C++描述:VirtualBase.h(非虛基類帶來(lái)的問(wèn)題)4.4虛基類作用域分辨符:可以通過(guò)作用域分辨符明確指定調(diào)用哪個(gè)類的接口;其語(yǔ)法形式如下:<派生類對(duì)象名>.<基類名>::<數(shù)據(jù)成員名>//訪問(wèn)數(shù)據(jù)成員<派生類對(duì)象名>.<基類名>::<成員函數(shù)名><參數(shù)表>//訪問(wèn)成員函數(shù)作用域分辨符舉例:Smain3_5_B.cpp2023/1/2930基類可以將其設(shè)為虛基類,這樣它的數(shù)據(jù)成員在內(nèi)存中就只有一個(gè)副本,成員函數(shù)也只有一個(gè)映射從而解決了同名成員的唯一標(biāo)識(shí)問(wèn)題虛基類由virtual標(biāo)識(shí),聲明語(yǔ)法如下:class<派生類名>:virtual<繼承方式><基類名>;例4.6虛基類舉例:sclass3_6.hsmain3_6.cpp2023/1/2931使用虛基類來(lái)定義公司員工管理系統(tǒng)中的多繼承關(guān)系//在繼承路徑“銷售經(jīng)理—>銷售人員—>員工”中將基類panyStaff設(shè)為虛基類classCSaleman:virtualpublicpanyStaff;//在繼承路徑“銷售經(jīng)理—>經(jīng)理—>員工”中將基類panyStaff設(shè)為虛基類classCManager:virtualpublicpanyStaff;//派生類CSaleManager成為兩條繼承路徑的交匯點(diǎn)classCSaleManager:publicCSaleman,publicCmanager;2023/1/29334.4虛基類比較使用作用域分辨符和虛基類技術(shù):使用作用域分辨符時(shí)基類的成員在內(nèi)存中存在多個(gè)副本,通過(guò)指定基類名來(lái)唯一標(biāo)識(shí)使用的是哪個(gè)副本,這樣可以存放不同的數(shù)據(jù)進(jìn)行不同的操作;使用虛基類技術(shù)使基類的成員在內(nèi)存中只存有一個(gè)副本;2023/1/29344.4虛基類虛基類的初始化:虛基類的初始化在語(yǔ)法上和處理一般基類一樣只是調(diào)用順序略有不同它遵循以下順序:1)虛基類的構(gòu)造函數(shù)在非虛基類之前調(diào)用;2)若同一層次中包含多個(gè)虛基類則按它們的聲明順序調(diào)用;3)若虛基類由非虛基類派生而來(lái)要先調(diào)用更高級(jí)別基類的構(gòu)造函數(shù)再遵循上述1和2的順序。
2023/1/29354.4虛基類虛基類初始化順序的簡(jiǎn)單舉例:classA;classB;classC:publicA,virtualB{};將產(chǎn)生如下的調(diào)用次序B()A()C()2023/1/29364.4虛基類較復(fù)雜的虛基類初始化舉例:2023/1/2937
為了避免在不同繼承路徑中繼承來(lái)的同一成員發(fā)生多個(gè)副本的沖突可以將相應(yīng)的基類設(shè)為虛基類,見(jiàn)源代碼:sclass3_7.hsmain3_7.cpp2023/1/2938classBase1classBase2classLevel2classBase2classLevel1classLeaf2023/1/29394.5聚合類聚合類的概念設(shè)計(jì)孤立的類是較容易的,難的是正確設(shè)計(jì)基類及其派生類;一般地如果在邏輯上A是B的一部分而A與B又不屬于同一類范疇,則不允許B繼承A的功能而是要用A和其它東西組合出B;類的聚合,就是指在一個(gè)類中內(nèi)嵌其他類的對(duì)象作為成員的現(xiàn)象;聚合類擁有內(nèi)嵌對(duì)象2023/1/2940聚合(aggregation)也是實(shí)現(xiàn)程序代碼重用的另一有效手段;出于信息隱藏的考慮,一般都將其訪問(wèn)權(quán)限設(shè)為“私有”。2023/1/2941聚合類中的構(gòu)造函數(shù)聚合類對(duì)象在創(chuàng)建時(shí)作為其組成部件的內(nèi)嵌對(duì)象將首先被系統(tǒng)創(chuàng)建;如果一個(gè)聚合類,同時(shí)又是一個(gè)派生類,那么它的構(gòu)造函數(shù)初始化列表還應(yīng)負(fù)責(zé)為基類構(gòu)造函數(shù)的調(diào)用提供參數(shù);2023/1/2942當(dāng)一個(gè)類既是聚合類又是派生類時(shí)的構(gòu)造函數(shù)定義形式:<類名>::<類名><形參表><基類><
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 高考物理總復(fù)習(xí)專題十三熱學(xué)第3講熱力學(xué)定律練習(xí)含答案
- 春運(yùn)期間全程出行安全手冊(cè)
- 《變壓器的簡(jiǎn)單介紹》課件
- 九年級(jí)歷史上冊(cè) 第6課 古代世界的戰(zhàn)爭(zhēng)與征服教案1 新人教版
- 2024-2025學(xué)年高中歷史 第二單元 古代歷史的變革(下)第4課 商鞅變法與秦的強(qiáng)盛(1)教學(xué)教案 岳麓版選修1
- 2024年秋八年級(jí)物理上冊(cè) 第一章 第4節(jié) 測(cè)量平均速度教案 (新版)新人教版
- 高中政治 第三專題 聯(lián)邦制、兩黨制、三權(quán)分立:以美國(guó)為例 第四框題 美國(guó)的利益集團(tuán)教案 新人教版選修3
- 2024年五年級(jí)語(yǔ)文上冊(cè) 第二單元 語(yǔ)文園地二配套教案 新人教版
- 2023六年級(jí)數(shù)學(xué)上冊(cè) 七 負(fù)數(shù)的初步認(rèn)識(shí)第1課時(shí) 認(rèn)識(shí)負(fù)數(shù)教案 西師大版
- 租賃工業(yè)吊扇合同范本(2篇)
- 2024世界糖尿病日糖尿病與幸福感糖尿病健康教育課件
- 世界問(wèn)候日-你的問(wèn)候溫暖世界主題PPT
- 初中數(shù)學(xué)論文參考文獻(xiàn)
- 關(guān)于設(shè)置治安保衛(wèi)管理機(jī)構(gòu)的通知(附安全保衛(wèi)科職責(zé))
- 沁園春·疊嶂西馳.中職課件電子教案
- 《留置尿管》PPT課件.ppt
- 淺論國(guó)省道干線公路養(yǎng)護(hù)管理存在問(wèn)題與應(yīng)對(duì)措施
- 淺談激光標(biāo)簽打印機(jī)在電磁兼容測(cè)試標(biāo)準(zhǔn)及在產(chǎn)品設(shè)計(jì)中應(yīng)關(guān)注的焦點(diǎn)
- MES系統(tǒng)調(diào)研教學(xué)提綱
- 《WS/T 367-2012 醫(yī)療機(jī)構(gòu)消毒技術(shù)規(guī)范》解讀培訓(xùn)
- 常用焊縫符號(hào)及其標(biāo)注方法(全)
評(píng)論
0/150
提交評(píng)論