版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高職動(dòng)畫(huà)設(shè)計(jì)(動(dòng)畫(huà)設(shè)計(jì)理論)試題及答案
- 2025年中職(應(yīng)用化工技術(shù))化工環(huán)保技術(shù)階段測(cè)試試題及答案
- 近八年福建中考化學(xué)試題及答案2025
- 養(yǎng)老院老人心理咨詢(xún)師激勵(lì)制度
- 養(yǎng)老院志愿者服務(wù)管理制度
- 公共交通停車(chē)場(chǎng)管理制度
- 2026年手工皮具制作進(jìn)階試題集含答案
- 2026年西安高端會(huì)計(jì)人才選拔試題及答案
- 2026年鄉(xiāng)鎮(zhèn)檢驗(yàn)員筆試重點(diǎn)題庫(kù)含答案
- 2026年南寧律協(xié)面試題庫(kù)與備考核心要點(diǎn)含答案
- 提高止水鋼板安裝一次合格率
- 鵝產(chǎn)業(yè)風(fēng)險(xiǎn)管理與預(yù)警-深度研究
- 2022年河北省公務(wù)員錄用考試《行測(cè)》真題及答案解析
- 電工承包簡(jiǎn)單合同(2篇)
- 新能源電站單位千瓦造價(jià)標(biāo)準(zhǔn)值(2024版)
- 軍隊(duì)院校招生文化科目統(tǒng)一考試模擬試卷
- 03課題三-建筑運(yùn)行大數(shù)據(jù)安全與數(shù)據(jù)質(zhì)量-20180703
- 工業(yè)區(qū)物業(yè)服務(wù)手冊(cè)
- 2024新能源集控中心儲(chǔ)能電站接入技術(shù)方案
- 零售行業(yè)的店面管理培訓(xùn)資料
- 培訓(xùn)課件電氣接地保護(hù)培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論