版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中職農(nóng)業(yè)技術(shù)(農(nóng)業(yè)技術(shù)應(yīng)用)試題及答案
- 2025年大學(xué)一年級(醫(yī)學(xué)檢驗技術(shù))臨床微生物檢驗試題及答案
- 2025年中職農(nóng)業(yè)經(jīng)濟(jì)管理(農(nóng)村經(jīng)濟(jì)核算)試題及答案
- 2025年高職第二學(xué)年(制冷與空調(diào)技術(shù))制冷系統(tǒng)設(shè)計專項測試卷
- 2025年大學(xué)第四學(xué)年(生物技術(shù))基因工程綜合測試試題及答案
- 2025年大學(xué)編輯出版學(xué)(編輯校對基礎(chǔ))試題及答案
- 2025年大學(xué)(口腔醫(yī)學(xué))口腔醫(yī)學(xué)心理學(xué)試題及答案
- 2025年大學(xué)護(hù)理技能綜合訓(xùn)練(護(hù)理綜合技能)試題及答案
- 2025年高職新能源汽車檢測與維修(汽車減排管理)試題及答案
- 2025年中職西式烹飪工藝(海鮮烹飪)試題及答案
- 2022年-2024年青島衛(wèi)健委事業(yè)編中醫(yī)筆試真題
- JJG(交通) 070-2006 混凝土超聲檢測儀
- 合作銷售礦石協(xié)議書
- 2025上海初三各區(qū)一模、二模作文題、主題歸納及審題分析指導(dǎo)
- 圍手術(shù)期心肌梗塞的護(hù)理
- 2025-2026學(xué)年蘇教版(2024)小學(xué)科學(xué)二年級上冊期末測試卷附答案(共三套)
- 垃圾清運(yùn)補(bǔ)充合同范本
- 2026屆湖南省長沙市長郡集團(tuán)九年級物理第一學(xué)期期末預(yù)測試題含解析
- 生日主題宴會設(shè)計方案
- 《JJG 1081.1-2024鐵路機(jī)車車輛輪徑量具檢定規(guī)程 第1部分:輪徑尺》 解讀
- 《基坑圍護(hù)結(jié)構(gòu)滲漏檢測技術(shù)標(biāo)準(zhǔn)》
評論
0/150
提交評論