雙語(yǔ)版C++程序設(shè)計(jì)(第3版) 課件 8 Objects and Classes_第1頁(yè)
雙語(yǔ)版C++程序設(shè)計(jì)(第3版) 課件 8 Objects and Classes_第2頁(yè)
雙語(yǔ)版C++程序設(shè)計(jì)(第3版) 課件 8 Objects and Classes_第3頁(yè)
雙語(yǔ)版C++程序設(shè)計(jì)(第3版) 課件 8 Objects and Classes_第4頁(yè)
雙語(yǔ)版C++程序設(shè)計(jì)(第3版) 課件 8 Objects and Classes_第5頁(yè)
已閱讀5頁(yè),還剩52頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡(jiǎn)介

Chapter8ObjectsandClasses

8.1Whatisanobject(對(duì)象)?Anobjectisacomponentofaprogramthatknowshowtoperformcertainactionsandknowshowtointeractwithotherpartsoftheprogram.Anobjectconsistsofoneormoredatavalues,whichdefinethestateorpropertiesoftheobjectfunctionsthatcanbeappliedtotheobjectThefunctionsassociatedwithanobjectrepresentwhatcanbedonetotheobjectandhowtheobjectbehaves.8.1Whatisanobject?Example:acomputergameAplayerwillhavedatavaluestorepresentcertainattributes,e.g.thestateoftheirhealthortheweaponstheypossess.Aplayermustbeabletoperformfunctionssuchaswalk,run,attackanenemy,andrescuethefairmaidentowin.8.2Whatisaclass?(什么是類(lèi)?)Aclassisageneralcategorythatdefines:Thecharacteristicsthatanobjectofthatcategorycontains.Thecharacteristicsarecalledpropertiesorclassdatamembers.Thefunctionsthatcanbeappliedtoobjectsofthatcategory.Thefunctionsarealsocalledclassmemberfunctionsormethods.encapsulation

Aclassdefinesboththetypeofdataandtheoperationsthatcanbeappliedtothatdata.Includingboththedataandfunctionsintooneunit,theclass,iscalledencapsulation.8.2Whatisaclass?Inourcomputeradventuregameaplayerclassmaybedefinedas:Note:Thisisonlyapseudo(notreal)-coderepresentationoftheclassusedforexplanatorypurposesonly.8.2Whatisaclass?AclassandinstanceoftheclassAclassisablueprintoratemplatethatcanbeusedtocreatemanyinstancesoftheclass.Aninstanceofaclassistheactualobject,createdfromthetemplate,thatcanbemanipulatedbythememberfunctionsoftheclass.Thedifferencebetweenaclassandaninstanceofaclass(anobject)islikethedifferencebetweenanounandapropernoun.personisanoun,JohnSmithisapropernounPersonistheclassandJohnSmithistheobject.8.2Whatisaclass?Example:theadventuregamethefollowingstatementcreatesaninstanceofadragon:Aclassmemberfunctioniscalledusingthememberselectionoperator(adot):Anynumberofdragonobjectscanbecreated.Heregeorgeisaninstanceoranobjectofthedragonclass.Thedataintheparenthesesrepresentinitialvaluesforsomeofthedatamembersofgeorge,e.g.sizeandnumber_of_claws.8.2Whatisaclass?Eachdragoncanperformdifferentfunctionsindependentofeachother.Tosummarise:AnobjectisaninstanceofaclassAnobjecthas:anidentity,i.e.itsname

astate,i.e.itsdatamembersabehaviour,i.e.itsmemberfunctions.8.3Furtherexamplesofclassesandobjects8.3.1AstudentclassSomeoftheproperties(classdatamembers)thatdefineastudentarethename,theaddress,thestudentnumber,thedateofbirth,thecourseandthecoursemark.Someofthefunctions(classmemberfunctionsormethods)thatcanbeperformedonastudentaretoupdatethestudent’scoursemark,displayaprogressreportandsoon.Astudentobjectisaspecificinstanceofthestudentclass.StudentsinacoursesuchasJohnSmithorLiuWeiareinstancesofthestudentClass.8.3Furtherexamplesofclassesandobjects8.3.2AbankaccountclassAbankaccounthasanaccountnumberandabalance.Operationsonabankaccountclassaretoopentheaccountwithanamountofmoneyandtodepositandwithdrawmoneyfromtheaccount.Theseoperationswillberepresentedbyclassmemberfunctionssuchasopen(amount),withdraw(amount)anddeposit(amount).8.4Abstraction(抽象)AbstractionEachsoftwareobjectisasimplificationofitsrealworldcounterpart.Inthecomputeradventuregame,eachsoftwareobjectbehavesonlyinsomerespectsasitsreal-worldcounterpart.theremaybenoneedforaplayertoeat,drinkorsleepinthegame.Thebankaccountclassdescribesonlythecharacteristicsandoperationsthatarerelevantforthepurposesoftheprogram.Abstractionisusedinoureverydaylives.8.4Abstraction(抽象)AbstractionAbstractionisusedinoureverydaylives.Alecturetimetablewillcontainasubject,alecturer’sname,aroomnumberandatime.Onthetimetable,theroomwherethelectureistobeheldisrepresentedsimplybyanumber.Forastudent,detailsoftheroomareunnecessaryandarethereforenotgiven.Foracollegeadministratorthesizeoftheroomisrelevantandsowouldbeincludedinanabstractionforthepurposesofcollegeadministration.8.5ConstructingaclassinC++ProgramExampleP8AOnline7,followingthekeywordclass,theclassisgiventhenamebank_accountLines10~13declarethememberfunctionsoftheclassLines15and16declarethedatamembersoftheclass.Themembersoftheclassaredividedintoprivateandpublicmembers.Thekeywordsprivateandpublicspecifytheaccesscontrollevelforthedataandfunctionmembersoftheclass.8.5ConstructingaclassinC++informationhidingTheprivatedatamembersareaccessibleonlytomemberfunctionsoftheclassandunavailabletoanyfunctionsthatarenotmembersoftheclass.Membersdeclaredwithpublicaccessareaccessibleinanypartofaprogram.Apublicmemberfunctioncanbecalledfromanypartofaprogram,whileaprivatememberfunctioncanonlybecalledfromwithinmemberfunctionsofthesameclass.Thepublicmemberfunctionsareknownasthepublicinterface

oftheclass.8.5ConstructingaclassinC++8.5ConstructingaclassinC++ThegeneralformatofaclassGenerally,datamembersofaclassareallprivateandthememberfunctionsoftheclassareallpublic.Thepublicsectionisusuallyplacedatthestartoftheclassbeforetheprivatesection.8.5ConstructingaclassinC++Theclassmemberfunctionsmustbedefined8.5ConstructingaclassinC++Aclassmemberfunctionhasthegeneralformat:Thescoperesolutionoperator::isusedheretospecifythatafunctionisamemberofaclass.8.6Usingaclass:definingandusingobjectsProgramExampleP8A...continued:Tousethebank_accountclass,placetheclassandmemberfunctiondefinitionsbeforemain().Theobjectsoftheclassaredefinedandusedinmain().Line44createsabank_accountobjectcalledmy_accountLine47initializesthedatamembersoftheclassbycallingthememberfunctionopen()withvaluesfortheaccount_noandbalance8.7Abstractdatatypes(抽象數(shù)據(jù)類(lèi)型)C++built-indatatypesEachdatatypehasauniquerangeofallowablevaluesandasetofallowableoperationsandfunctions.Theimplementationdetailsofthedatatypesarehiddenfromtheprogrammer.Thisiscalleddataabstraction.abstractdatatype(ADT)ThebankaccountclassdefinesanewdatatypethatisnotbuiltintotheC++language.Oncewritten,itisnotnecessarytoknowthedetailsofhoweachoftheclassmemberfunctionswork.knowhowtocallthepublicmemberfunctionsoftheclasssuchasopen(),deposit()andwithdraw().8.8Constructors(構(gòu)造函數(shù))Constructoraclassmemberfunctionthathasthesamenameastheclassbeautomaticallycalledwhenanobjectoftheclassiscreatedfrequentlyusedtoprovidetheprivatedatamembersoftheobjectwithinitialvalues.Example:Theprivateaccount_numberandbalanceareassignedtheirinitialvaluesinopen().aconstructorisaddedtothebank_accountclassinplaceoftheopen()memberfunction.8.8ConstructorsProgramExampleP8BTheconstructorisneverexplicitlycalledandthereforecannotreturnavalue.That’swhyaclassconstructorhasnoreturntype,notevenvoid.8.8ConstructorsRewritingmain()tomakeuseoftheclassconstructorLine44ofthisprogramcreatesanobjectcalledmy_accountwiththesevalues:8.9DefaultclassconstructorAdefaultclassconstructorisaconstructorthathasnoparameters.ProgramExampleP8C8.9DefaultclassconstructorProgramExampleP8C…continued8.9DefaultclassconstructorProgramExampleP8C…continued8.10Overloadingclassconstructors

(重載類(lèi)構(gòu)造函數(shù))ConstructorscanbeoverloadedTherecanbeseveralconstructorswithinaclass,eachwithadifferentnumberofparametersProgramExampleP8D8.10OverloadingclassconstructorsProgramExampleP8D…continuedOnlyoneargumentgivenwhentheobjectmy_accountisbeingcreatedtheclassconstructoronlines27to31iscalled,assigning123totheaccountnumberand0.0tothebalance.8.11ConstructorinitialisationlistsAdatamemberinitializationlistisfrequentlyusedinconstructorsinplaceofassignmentstatements.NostatementsleftinthisconstructorThechainbrackets{}arestillrequired8.12DefaultargumentvaluesinaconstructorConstructorsarefunctions,defaultargumentscanalsobeusedinconstructorsProgramExampleP8E8.12DefaultargumentvaluesinaconstructorProgramExampleP8E…continued8.12DefaultargumentvaluesinaconstructorProgramExampleP8E…continued8.13staticclassdatamembers(靜態(tài)類(lèi)數(shù)據(jù)成員)Astaticclassdatamemberisindependentofalltheobjectsthatarecreatedfromthatclass.Onlyonecopyofastaticdatamemberexistsandissharedbyallobjectsofaparticularclass.Thevalueofthestaticdatamemberisthereforethesameforalltheclassobjects.Ifevenoneoftheobjectsofaclassmodifiesthevalueofastaticdatamember,thenthevalueofthestaticdatamemberchangesforeveryobjectofthatclass.8.13staticclassdatamembersProgramExampleP8F8.13staticclassdatamembersProgramExampleP8F…continued8.13staticclassdatamembersProgramExampleP8F…continuedAstaticdatamemberisinitializedoutsidetheclassandoutsidemain()next_account_numberoccursonlyonceandissharedbyallobjectsoftheclassandbankaccountobjects.8.13staticclassdatamembersclassvariable:AssociatedwithaclassratherthananobjectinstancevariablesAssociatedwithinstancesoftheclassandarecalled.8.14UsingreturninamemberfunctionAclassmemberfunctioncanreturnavalueusingareturnstatementProgramExampleP8G8.14Usingreturninamemberfunction8.14Usingreturninamemberfunctioninspectororaccessorfunction(檢查或讀值函數(shù))Thememberfunctionget_balance(),Inspectorfunctionsallowprivatedatamembersofaclasstobeinspectedfromoutsidetheclass.mutatorfunction(設(shè)值函數(shù))Theclassmemberfunctionsdeposit()andwithdraw().Mutatorfunctionschangethevaluesoftheprivatedatamembersofaclass.8.15Inlineclassmemberfunctions(內(nèi)聯(lián)成員函數(shù))Inlinefunctionsareusefulincaseslikethiswhereyouwanttouseafunctionbutdon’twantthefunctionoverheadsThememberfunctionsofaclasscanbemadeinlinebyprecedingthefunctionheaderwiththekeywordinline.Analternativewayofmakingamemberfunctioninlineistoincludethefunctiondefinitioninthebodyoftheclass.8.15InlineclassmemberfunctionsAdisadvantageofmakingfunctionsinlinebymovingtheirdefinitionsintotheclassisthattheclassbecomes‘crowded’withdetails.8.16Classinterfaceandclassimplementationclasspublicinterface:alistofthememberfunctionsoftheclassandhowtheycanbeused.Thepublicinterfacestartsatpublicandendsatthekeywordprivate.Aprogrammerusingaclassshouldonlyhavetoreadthepublicinterfaceinordertousetheclass;Tomakethepublicinterfaceeasiertoread,commentsshouldbeincludedexplainingthepurposeofthefunctions,theirparametersandtheirreturnvalues.classimplementation:detailsintheprivatesectionandinthememberfunctions8.16Classinterfaceandclassimplementation8.16Classinterfaceandclassimplementation8.16.1SeparationofclassinterfaceandclassimplementationItisnotpossibleinC++tocompletelyseparatethepublicinterfaceofaclassfromitsimplementation.InC++,theclassdeclarationisnormallyplacedinaheaderfile(e.g.bank_ac.h)andthememberfunctionsarenormallyplacedinaseparatefile(e.g.bank_ac.cpp).filebank_ac.h:Thelinesbeginningwith#arestandardpreprocessordirectivesusedtopreventmultipleinclusionsoftheheaderfileintoaprogram.8.16Classinterfaceandclassimplementation8.16ClassinterfaceandclassimplementationPlacinglines43to83ofthebankaccountclassintobank_ac.cpp:8.16ClassinterfaceandclassimplementationUsingthesetwofiles,ProgramExampleP8Gcannowbere-writtenas:Lines5and6arepreprocessordirectivesthatincorporatethebankaccountheaderandsourcefilesintotheprogram.Thequotesaroundthefilenamesonlines5and6tellthecompilerthatthefilestobeincludedareinthesamedirectoryastheprogram.8.16Classinterfaceandclassimplementation8.16.2UseofnamespacesinheaderfilesAprogrammaycontainmanyclassesandfunctions#includedfrommanydifferentheaderfiles.Anelementinoneoftheheaderfilesmayhaveinadvertentlybeengiventhesamenameasanelementinanotherheaderfile----resultinacompilererror.namespace:anamedblockofstatementsinaprogram.Withinanamespace,anidentifiernamemustbeuniquealthoughthenamemaybepreviouslyusedinothernamespaces.8.16Classinterfaceandclassi

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論