C++面向?qū)ο蟪绦蛟O(shè)計雙語教程(第3版)課件 class 7-classes objects-4_第1頁
C++面向?qū)ο蟪绦蛟O(shè)計雙語教程(第3版)課件 class 7-classes objects-4_第2頁
C++面向?qū)ο蟪绦蛟O(shè)計雙語教程(第3版)課件 class 7-classes objects-4_第3頁
C++面向?qū)ο蟪绦蛟O(shè)計雙語教程(第3版)課件 class 7-classes objects-4_第4頁
C++面向?qū)ο蟪绦蛟O(shè)計雙語教程(第3版)課件 class 7-classes objects-4_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

ObjectivesToabletodefineobjectsofotherclassesasclassmembersToknowhowtouseshallowcopyanddeepcopyTo

abletodefineanduseobjectarraysTounderstandthepurposeoffriendfunctionsandfriendclasses01ObjectMembers03CopyMembers02ArraysofObjects04Friends01ObjectMembersObjectMembersCaseStudy1Defineastudentclassthatname,dateofbirth,age.Thestudentobjectsdisplaythedataofastudent.attributesbehaviorClassTemplateformakingobjectsstudentblueprintname,DOB,ageprintWhatisDOB?Date:year,month,dayname,year,month,day,ageDateobjectObjectmemberObjectMembersAclasscanhaveobjectsofanotherclassasdata

members.Usingobjectmembersistomakesoftwarereusability.Acommonformofsoftwarereusabilityiscompositionoraggregation,inwhichaclasshasobjectsofanotherclass.DeclarationofObjectMembersclass

Date{public:Date(int,int,int);~Date();private:intyear,month,day;};Studentname:stringDOB:Dateage:int+student()+~student()+print():voidclass

Student{public:Student();~Student();voidprint();private:intage;DateDOB;//objectmemberstringname;};InitializationofObjectMembersclass

Date{public:Date(int,int,int);~Date();private:intyear,month,day;};class

Student{public:Student(string,int,int,int,int);~Student();private:

intage;

DateDOB;//objectmember

stringname;};Studentname:stringDOB:Dateage:int+student(string,int,int,int,int)+~student()+print():voidStudent::Student(string

name,int

d,int

m,int

y,int

age):DOB(d,m,y){this->name=

name;this->age=age;cout<<

"Studentobjectiscreated\n";}memberinitializerintmain(){Studentstd("Helen",2000,9,30,18);return0;}AccessingDataMembersofClassObjectsvoid

Student::print(){cout<<name<<age<<endl;cout<<DOB<<endl;}void

Student::print(){cout<<name<<age<<endl;DOB.print();}class

Date{public:Date(int,int,int);~Date();voidprint();private:intyear,month,day;};intmain(){Studentstd("Helen",2000,9,30,18);std.print();return0;}Studentname:stringDOB:Dateage:int+student()+~student()+print():voidDateyear:intmonth:intday:int+Date(int,int,int)+~Date()+print():voidaggregationclass

Date{public:Date(int,int,int);~Date();private:intyear,month,day;};cout<<DOB.year;voidDate::print(){cout<<year<<month<<day;}ObjectMembers-CompositionCaseStudy1-1Defineastudentclassthathasname,dateofbirth,andstatusofhealth.Thestudentobjectsdisplaythedataofastudent.behaviorattributesname,DOB,age,

healthprintHealth:height,weightStudentname:stringDOB:Datehealth:Health+student(string,int,int,int,int,int,int)+~student()+print():voidHealthheight:intweight:int+Health(int,int)+~Health()+print():voidDateyear:intmonth:intday:int+Date(int,int,int)+~Date()+print():voidcompositionaggregationObjectMembersclass

Health{public:Health(int,int);~Health();voidprint()const;private:intheight,weight;};class

Student{public:Student(string,int,int,int,int,int,int);~Student();voidprint();private:intage;Healthhealth;//objectmemberDateDOB;//objectmemberstringname;};Student::Student(string

name,int

d,int

m,int

y,int

age,int

h,int

w):DOB(d,m,y),health(h,w){this->name=

name;this->age=age;cout<<

"Studentobjectiscreated\n";}void

Student::print(){cout<<name<<age;DOB.print();health.print();}ExecutionofObjectMembersclass

Date{public:Date(){cout<<"CallingDateconstructor\n";}~Date(){cout<<"CallingDatedestructor\n";}};class

Health{public:Health(){cout<<"CallingHealthconstructor\n";}~Health(){cout<<"CallingHealthdestructor\n";}};class

Student{public:Student():health(),DOB(){cout<<"CallingStudentconstructor\n";}~Student(){cout<<"CallingStudentdestructor\n";}private:Date

DOB;Healthhealth;};intmain(){Studentst;return0;}Result:CallingDateconstructorCallingHealthconstructorCallingStudentconstructorCallingStudentdestructorCallingHealthdestructorCallingDatedestructorExecutionofObjectMembers1.ConstructingsequenceThemembers’constructorsareinvokedbeforethebodyofthecontainingclass’sownconstructorinexecuted.Theconstructorsarecalledintheorderinwhichthemembersaredeclaredintheclassratherthantheorderinwhichthemembersappearintheinitializerlist.2.Destroyingsequence

Whenaclassobjectcontainingclassobjectsisdestroyed,thebodyofthatobject’sowndestructorisexecutedfirstandthenthemembers’destructorsareexecutedinreverseorderofdeclaration.

InitializationofDataMembersUsingInitializerThethreedatamembersmustbeinitializedbyusinginitializer.memberobjectsofclasseswithoutdefaultconstructorconstmembersreferencemembersclass

A{public:A(int

n,int

d,int

m,int

y,int&a):i(n),d(dd,mm,yy),pc(a){}private:const

inti;Dated;int&pc;};intmain(){intn=5;Aa(n,20,10,2000,n);return0;}02ArraysofObjectsArraysofObjectsinta[5];intb[]={1,2,3,4};DatearrDay[4];DatearrNow[]={Date(2011,3,24),

Date(2013,5,10),

Date(2016,6,12)};theclassmustprovideadefaultconstructor.theclassmustprovideaconstructorwithparameters.Anarrayofaclasstypeisalsoknownasanarrayofobjects.

Youcancreateanarrayofobjectsofthesameclasslikeanarrayofbuilt-intypes.ObjectArraysclass

Date{public:Date(int,int,int);Date();~Date();voidprint()const;private:intday,month,year;static

intcount;};Date::Date(int

d,int

m,int

y):day(d),month(m),year(y){count++;

cout<<"The"<<count<<"thobjectcallstheconstructor\n";}Date::Date():day(1),month(10),year(2019){count++;cout<<"The"<<count<<"thobjectcallsdefaultconstructor\n";}void

Date::print()const{cout<<year<<"/"<<month<<"/"<<day<<endl;}Date::~Date(){cout<<"The"<<count<<"thobjectisdestroyed\n";print();count--;}int

Date::count=0;intmain(){DatearrDay[2];DatearrNow[]={Date(2011,3,24),Date(2013,5,10),Date(2016,6,12)};Date*pDay=new

Date[2];delete[]pDay;cout<<"--------\n";return0;}The1thobjectcallsdefaultconstructorThe2thobjectcallsdefaultconstructorThe3thobjectcallstheconstructorThe4thobjectcallstheconstructorThe5thobjectcallstheconstructorThe6thobjectcallsdefaultconstructorThe7thobjectcallsdefaultconstructorThe7thobjectisdestroyed2019/10/1The6thobjectisdestroyed2019/10/1--------The5thobjectisdestroyed12/6/2016The4thobjectisdestroyed10/5/2013The3thobjectisdestroyed24/3/2011The2thobjectisdestroyed2019/10/1The1thobjectisdestroyed2019/10/103CopyMembersCopyingMembersinti=3;intj=i;Dateday1(7,8,2010);Dateday2=day1;Classobjectscanbecopiedwhenobjectsarecreated.Aclassobjectcanbedeclaredwithacopyofanotherobjectofthesameclass.Thecopyofaclassobjectisacopyofeachmember,i.e.defaultmember-wise

initialization.Theinitializationofcopyinga

class

object

isexecutedbyaspecialconstructor,calledcopyconstructor.DefinitionofCopyConstructorclass

Date{public:Date(int=1,int=1,int=2000);~Date();voidprint()const;private:intday,month,year;};Date::Date(const

Date&date){day=date.day;month=date.month;year=date.year;}Date(const

Date&);Copy

constructorDateday1(7,8,2010);Dateday2=day1;Member-wisecopyingCopyconstructorisaspecialconstructorfordeclaringanewobjectasacopyofanexistingobject.WhenCallaCopyConstructor?Datef(Date

d){d.print();return

d;}class

Date{public:Date(int,int,int);~Date();voidprint()const;private:intday,month,year;};intmain(){Dateday1(7,8,2010);Dateday2=day1;Dateday3(day1);day3=f(day2);return0;}Date(const

Date&);Thecopyconstructorisinvokedinthethreecases:DeclareanewobjectPassavalueofanobjectwhencallingafunctionReturnanobjectinafunctionShallowCopyMembersintmain(){Dateday1(7,8,2010);Dateday2=day1;Dateday3(day1);day3=f(day2);return0;}class

Date{public:Date(int,int,int);~Date();voidprint()const;private:intday,month,year;};Datef(Date

d){d.print();return

d;}Date(const

Date&);Shallowcopymeansthateachmemberoftheclassareindividuallycopiesbyusingassignmentoperator(=).Whenacopyconstructorisnotdefinedintheclass,adefaultcopyconstructorisprovided.ShallowCopyMembersday1day2class

Date{public:Date(int,int,int,constchar*);~Date();private:intday,month,year;char*name;};Date::Date(int

d,int

m,int

y,const

char*nstr):day(d),month(m),year(y){name=new

char[strlen(nstr)+1];strcpy_s(name,strlen(nstr)+1,nstr);}Date::~Date(){cout<<name<<"destroyinganobject...\n";deletename;}intmain(){Dateday1(7,8,2010,"day1");Dateday2=day1;return0;}Runerror!nameinfreestoreyearmonthdayyearmonthdayDeepCopyMembersclass

Date{public:Date(int,int,int,constchar*);Date(const

Date&);~Date();voidprint()const;private:intday,month,year;char*name;};Date::Date(int

d,int

m,int

y,constchar*nstr):day(d),month(m),year(y){name=new

char[strlen(nstr)+1];strcpy_s(name,strlen(nstr)+1,nstr);cout<<name<<"constructinganobject...\n";}Date::~Date(){cout<<name<<"destroyinganobject...\n";deletename;}DeepCopyMembersDate::Date(const

Date&date){day=date.day;month=date.month;year=date.year;if(date.name!=nullptr){name=new

char[strlen(date.name)+1];strcpy_s(name,strlen(date.name)+1,date.name);}else name=nullptr;cout<<"constructingacopyobject...\n";}intmain(){Dateday1(7,8,2010,"day1");Dateday2=day1;}day1day2nameinfreestoreyearmonthdayyearmonthdaynameinfreestore04FriendsFriends(友元)Anordinarymemberfunction

declarationspecifiesthreelogicallydistinctthings:thefunctioncanaccesstheprivatepartoftheclassdeclarationthefunctionisinthescopeoftheclassthefunctionmustbeinvokedontheanobject(hasathispointer)FriendsAfriendoftheclassisafunctionoraclass.Itisnotamemberofthisclass.

Itcanbegrantedthesameaccesstotheclassasthememberoftheclass,i.e.i

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論