




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广告投放合同范文(15篇)
- 气象信息服务协议书(18篇)
- 网络流量负载均衡技术试题及答案
- 农村土地承包经营权流转暨发展合同书
- 行政理论基础知识点考题及答案
- 数据库的备份与恢复策略试题及答案
- 监理师考试实例分析试题及答案
- 废弃渣土转让合同协议书
- 展会服务合同协议书
- 奇葩汉字试题大全及答案
- 2025年外研版英语八年级下册期末检测模拟题附答案(一)
- 采购油卡协议书
- 第四版(2025)国际压力性损伤溃疡预防和治疗临床指南解读
- 2025年档案管理专业考试试卷及答案
- 驻村第一书记工作总结模版
- 2025物理大一轮复习讲义复习讲义答案精析
- 2025年高考政治抢押秘籍(江苏专用)时政热点04哪吒2(学生版+解析)
- 广东省深圳市2025年中考模拟历史试题四套附参考答案
- 粤语知识测试题及答案
- 2025年北京市东城区初三语文一模作文《根基》写作指导+范文
- 2025年高考化学考试易错题易错类型18物质的分离、提纯与鉴别(7大易错点)(学生版+解析)
评论
0/150
提交评论