雙語版C++程序設(shè)計(第3版) 課件 11 Inheritance_第1頁
雙語版C++程序設(shè)計(第3版) 課件 11 Inheritance_第2頁
雙語版C++程序設(shè)計(第3版) 課件 11 Inheritance_第3頁
雙語版C++程序設(shè)計(第3版) 課件 11 Inheritance_第4頁
雙語版C++程序設(shè)計(第3版) 課件 11 Inheritance_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

付費下載

下載本文檔

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

文檔簡介

Chapter11Inheritance

11.1Whatisinheritance?Inheritance

isoneofthefundamentalconceptsofobject-orientedprogramming.Inheritanceallowsanewclasstobeconstructedusinganexistingclassasabasis.Thenewclassincorporatesorinheritsthedatamembersandmemberfunctionsoftheexistingclass.Additionaldatamembersandmemberfunctionscanbeaddedtothenewclass,therebyextendingtheexistingclass.Theexistingclassisknownasthebase

class.Thenewclassisknownasthederived

orinherited

class.11.1Whatisinheritance?HowtoimplementthisinheritanceHierarchy?Doweneedtodefineemployeenumber,surname,forename,employedforeachclass?11.1Whatisinheritance?Employeesinthecompanyareeitherpart-timeorfull-time.Theemployeenumberandnamearecommontobothtypesofemployee.Whetherthepersoniscurrentlyemployedorisapastemployeeisalsocommontobothtypesofemployees.Part-timeemployeesarepaidanhourlyrate.full-timeemployeesareonasalaryandareallowedanannualpaidleave.Managersarealsofull-timeemployees,whoinadditiontotheirannualsalaryandpaidleavearealsopaidanannualbonus.11.1Whatisinheritance?Employeesclassisknownasthebase.thebaseclassisnotmodifiedinanywayandissimplyusedasabasisforwritingthederivedclass.Thisiscalledreusability(thebaseclassisbeingreused)andisamajorgoalofobject-orientedprogramming.Thederivedclasscan,inturn,beusedasabaseclassfromwhichotherclassesmaybederived,thuscreatingaclasshierarchy.11.2InheritancesyntaxInitssimplestform,inheritanceisusedbyfirstdefiningthebaseclass:Thisisthesameasdefininganyclass.Next

thederivedclassesaredefined:ProgramExampleP11B11.2Inheritancesyntax11.2Inheritancesyntax11.2Inheritancesyntaxclasspart_time:publicemployeeSyntax:

class

DerivedClassName

:

access-level

BaseClassName

access-levelspecifiesthetypeofderivationprivatebydefault,publicprotectedderivedclass.

Inheritancecreatesahierarchyofrelatedclasses(types)whichsharecodeandinterface.codereusability11.2InheritancesyntaxAderivedclasscanoverridemethodsdefinedinitsparentclass.Withoverriding,themethodinthesubclasshastheidenticalsignaturetothemethodinthebaseclass.asubclassimplementsitsownversionofabaseclassmethod.11.2Inheritancesyntax11.2Inheritancesyntax11.2Inheritancesyntaxthebaseclassdefaultconstructorisautomaticallycalledfromthederivedclass.Whichdisplay_data()iscalled??11.2InheritancesyntaxHowtoinitializethedatamembersofobjects?part_time

pt(123,"Smith","John",5.12);full_time

ft(124,"Jones","Mary",21500,21);managerman(125,"Other","A.N.",32000,30,9500);11.3Passingargumentstoabaseclass

constructorProgramP11Busedconstructorstoinitialisethedatamembersfromkeyboardinput.Toallowforinitialisationofanobjectwhenitiscreated,aconstructorwithaparameterlistisrequired.Whenaderivedobjectiscreated,itshouldtakecareoftheconstructionofthebaseobjectbycallingtheconstructorforthebaseclass.thetechnique.11.3Passingargumentstoabaseclass

constructorAsseeninthepreviousprogram,thebaseclassdefaultconstructorisautomaticallycalledfromthederivedclass.Whenanobjecthasinitialvalues,thenitialisationofthebaseclassobjectisdonebytheuseofaninitialisationlistinthederivedclassconstructor.Thenextprogramdemonstratesthetechnique.ProgramExampleP11C11.3Passingargumentstoabaseclass

constructorProgramExampleP11C11.3Passingargumentstoabaseclass

constructorProgramExampleP11C11.3Passingargumentstoabaseclass

constructorProgramExampleP11C11.3Passingargumentstoabaseclass

constructorProgramExampleP11C11.3Passingargumentstoabaseclass

constructorLine157nowinitialisestheobjectptwiththevaluesintheparentheses.Theconstructoronlines75to79iscalled.Theexpressionemployee(number,sname,fname)intheinitialisationlistonline78isanexplicitcalltothebaseclassconstructoronlines32to39.11.4ProtectedclassmembersThekeywordsprivateandpublicareusedtocontrolaccesstoboththedatamembersandthememberfunctionsofaclass.Aprivatedatamemberormemberfunctionofabaseclasscannotbeaccessedfromamemberfunctionofaderivedclass,thusensuringthattheprincipleofdatahidingisupheld.Inpracticeitcanbeconvenienttosharedatabetweenabaseclassandaderivedclass.11.4ProtectedclassmembersTherearetwowaysofdoingthis.Onepossibilityistochangetheaccessleveloftherelevantprivatememberstopublic,thusallowingthederivedclasstherequiredaccesstothesemembers.thisviolatestheprincipleofdatahidingbymakingthedatamembersavailableforuncontrolledmodificationfromanypartoftheprogram.Togetoverthisproblem,C++hasathirdlevelofaccessknownasprotectedaccess.11.4ProtectedclassmembersThislevelofaccessallowsderivedclasses(andonlyderivedclasses)tohaveaccesstospecifiedbaseclassmembers.Thenextprogramdemonstratestheuseofprotectedclassdatamembers.ProgramExampleP11D11.4ProtectedclassmembersProgramExampleP11D11.4ProtectedclassmembersLine61definesarectangleobjectrwithsidesofwidth1andheight2.Line62definesasquareobjectswithsidesofsize3.Line64displaysthedimensionsoftherectangleandline65displaysthedimensionofthesquare.Inordertodisplaythedimensionofthesquare,line51requiresaccesstothebaseclassdatamemberwidth.Thisisachievedbymakingwidthaprotecteddatamemberbyplacingitintheprotectedsectionoftheclass.11.4Protectedclassmembersifabaseclassmemberisdeclaredasprivate,thenthismemberisnotaccessibleoutsidethebaseclass,notevenfromaderivedclass.Protectedmembersareaccessiblefromwithinabaseclassandfromwithinanyofitsderivedclasses.Publicmembers(usuallymemberfunctions)areaccessiblefromanypartoftheprogram.11.5Typesofinheritance:public,protected

andprivateTheaccessrightsofabaseclassmemberwithinaderivedclasscanalsobespecifiedwhenthederivedclassisdeclared.Publicinheritancespecifiesthattheaccessrightsoftheinheritedmemberswillbethesameastheywereinthebaseclass.Replacingthekeywordpublicwiththekeywordprotectedmakesallpublicmembersinthebaseclassbecomeprotectedmembersinthederivedclass;.11.5Typesofinheritance:public,protected

andprivateThethreetypesofinheritancearesummarisedinthefollowingtable:11.5Typesofinheritance:public,protected

andprivateprotectedmembersinthebaseclassremainprotectedmembersinthederivedclass.Privateinheritanceisspecifiedbyusingthekeywordprivate.Withprivateinheritance,allthepublicandprotectedmembersofthebaseclassbecomeprivateintheinheritedclass.Inallcases,whetheritispublic,protectedorprivateinheritance,privatemembersinabaseclassareinaccessibleinaderivedclass.11.6CompositionInheritancedepicts“a-kind-of”relationshipbetweenclasses.Theothertypeofrelationshipthatmayexistbetweenclassesisthe“has-a”relationship,alsoknownascomposition.InC++thismeansthatobjectsofoneclassarecomposedofobjectsofanotherclass.ProgramExampleP11E11.6Composition11.6CompositionProgramExampleP11E11.6CompositionProgramExampleP11EProgramExampleP11E11.6CompositionAlineiscomposedoftwopointobjects.Whenalineobjectiscreated,theconstructorforthepointobjectembersiscalledbeforetheconstructorforthelineobjectiscalled.Whereasinheritancedefinesarelationshipbetweenclasses,compositiondefinesarelationshipbetweenobjects.11.7MultipleinheritanceC++allowsinheritancefrommorethanjustonebaseclass.AsshowninFigure11.5,thisallowstheconstructionofahierarchytoexpressarelationshipsuchas,classcis“a-kind-of”classaandisalso“a-kind-of”classb.11.7MultipleinheritanceThenextprogramusesmultipldate_timefromexistingdateandtimeclasses.Thedateclassiscalledcalendaranditisdeclaredinthefilecalendar.h:Thetimeclassisthetime24classfromprogramP10H.Theclassheaderisinthefiletime24.handcontainslines7to23ofprogramP10H.Theprivatedatamembershavebeenchangedtoprotectedsothattheycanbeusedbyinheritedclasses.Thetime24classmemberfunctionsareinthefiletime24.cpp.11.7Multipleinheritance11.7Multipleinheritance11.8Virtualbaseclasses(Classbisthebaseclassofbothd1andd2,whicharethebaseclassesofd3.Theprotectedandpublicmembersofbwillbeinheritedbyd1andd2fromtheirimmediatebaseclassb.Sinced3isderivedfrombothd1andd2,itinheritstheprotectedandpublicmembersofbfrombothd1andd2.Twocopiesoftheprotectedandpublicmembersofbnowexistind3.Programmingpitfalls1.Bydefault,theinheritancetypeisprivate,whichisnotthetypethatisusuallyrequired.

溫馨提示

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

最新文檔

評論

0/150

提交評論