C++面向对象程序设计双语教程(第3版)课件 class 7-classes objects-4_第1页
C++面向对象程序设计双语教程(第3版)课件 class 7-classes objects-4_第2页
C++面向对象程序设计双语教程(第3版)课件 class 7-classes objects-4_第3页
C++面向对象程序设计双语教程(第3版)课件 class 7-classes objects-4_第4页
C++面向对象程序设计双语教程(第3版)课件 class 7-classes objects-4_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论