




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
ObjectivesToabletodefineconstmemberfunctionsandconstobjectsTobeabletounderstandthethispointerToabletodefineandusestaticmembersTo
managedynamicmemorybyusingnewanddelete01ConstantMemberFunctionsandConstantObjects03StaticMembers02Thethispointers04FreeStore01ConstantMemberFunctionandConstantObjectsclass
Date{public:Date(int=2018,int=1,int=1);voidoutput();intgetDay()const;intgetMonth()const;~Date();private:intday,month,year;boolcheck();};ConstantMemberFunctionsConstantmemberfunctionsclass
Date{public:Date(int=2021,int=1,int=1);voidoutput();intgetDay();intgetMonth();~Date();private:intday,month,year;boolcheck();};int
Date::getMonth(){returnmonth;}int
Date::getDay(){returnday;}Definition:Usingkeywordconstdefinesconstantmemberfunctions.Theconstkeywordisplacedaftertheparameterlistinthe
functiondeclarationanddefinition.Thosefunctionsthatdonotmodifythedataofaclass,i.e.read-only,aredefinedasconstantmemberfunction.ConstantMemberFunctionsclass
Date{public:Date(int=2018,int=1,int=1);voidoutput();intgetDay()const;intgetMonth()const;~Date();private:intday,month,year;boolcheck();};int
Date::getMonth()const{returnmonth;}int
Date::getDay()const{returnday;}intmain(){Datetoday(2021,9,15);today.output();cout<<"Date:"<<today.getMonth()<<"-"<<today.getDay();return0;}int
Date::getMonth()const{
return++month;
}//errorConstantObjectsintmain(){Datetoday(2018,9,15);today.output();cout<<"Date:"<<today.getDay()<<endl;const
Dateday;//day.output();//errorcout<<"Date:"<<day.getDay()<<endl;return0;}constantobjectclass
Date{public:Date(int=2018,int=1,int=1);voidoutput();intgetDay()const;};Non-constantobjectAn
object
of
a
class
may
be
declaredtobeconst,justlikeanyotherC++variable.ConstantObjectsintmain(){Datetoday(2018,9,15);today.output();cout<<"Date:"<<today.getDay();const
Dateday;//day.output();//errorcout<<"Date:"<<day.getDay();return0;}Aconstmemberfunctioncanbeinvokedforbothconstantandnon-constantobjectsAnon-constmemberfunctioncanbeinvokedonlyfornon-constantobjectsTheconstpropertyofanobjectgoesintoeffectaftertheconstructorfinishesexecutingandendsbeforetheclass'sdestructorexecutes.Sotheconstructoranddestructorcanmodifythedatamembersoftheobject,butothermethods(i.e.functions)oftheclasscannot.02ThethisPointersThethisPointersThe
this
pointerisapointeraccessibleonlywithinthenon-staticmemberfunctionsofa
class.Thethispointerpointstotheobjectforwhichthefunctionwasinvoked.Butanobject’sthispointerisnotpartoftheobjectitself.thisisnotanordinaryvariablebecauseitisnon-modifiable-assignmentstothisarenotallowed.CaseStudy1:defineaDateclassThethisPointersvoid
Date::output(){cout<<
this->year<<
"-"
<<
this->month<<
"-"
<<
this->day<<endl;}class
Date{public:Date(int=2018,int=1,int=1);voidoutput();intgetDay()const;voidprintThis();private:intday,month,year;boolcheck();};void
Date::printThis(){cout<<
this
<<endl;}int
Date::getDay()const{return
this->day;}intmain(){Dateday1(2021,9,15);cout<<&day1<<endl;day1.printThis();cout<<
"Sizeoftheobject:"
<<
sizeof(day1)<<endl;Dateday2(2020,9,15);cout<<&day2<<endl;day2.printThis();cout<<
"Sizeoftheobject:"
<<
sizeof(day2)<<endl;return0;}001BFDC4001BFDC4Sizeoftheobject:12001BFDB0001BFDB0Sizeoftheobject:12ThethisPointersclass
Date{public:Date(int=2018,int=1,int=1);voidoutput();Date&reset(int,int,int);intgetDay()const;~Date();private:intday,month,year;boolcheck();};Date&Date::reset(int
y,int
m,int
d){this->year=y;this->month=m;this->day=d;return*this;}intmain(){Datetoday(2018,10,15);today.output();cout<<"Date:"<<(today.reset(2021,9,20)).getDay()<<endl;return0;}2018-10-15Date:20ObjectisdestroyedDate::~Date(){cout<<"Objectisdestroyed\n";}CaseStudy1-1:defineaDateclassRequirement:YouwillresetanewDatevaluebasedonthepreviousdefinitionofclassDateThethisPointerclass
Date{public:Date(int=2018,int=1,int=1);boolisEqual(Date&date);private:intday,month,year;boolcheck();};CaseStudy1-2:defineaDateclassRequirement:YoudeterminewhethertwoDateobjectsareequal.bool
Date::isEqual(Date&date){if(this->year==date.year&&this->month==date.month&&this->day==date.day)return
true;elsereturn
false;}intmain(){Dateday1(2021,9,15);Dateday2(2020,9,15);cout<<(day1.isEqual(day2)?"theyareequal":"theyareunequal")<<endl;return0;
}03StaticMembersStaticMembersDefineastudentclasswithastudentNodatamember.Youneedtodothefollowingtasks:OutputthedataofthestudentobjectsWorkoutthenumberofthestudentobjectsstudent-studentNo:int-count:int+student()+print():void+getCount():intCaseStudy2Dataabstraction:data:studentNo-intFunctionsPrint–voidprint()getCount-numberofstudentobjectsStaticMembersstudent::student()//constructor{count++;studentNo=count;}void
student::print(){cout<<
"studentNo:"
<<studentNo<<endl;}int
student::getCount(){
returncount;}intmain(){
studentst1;st1.print();cout<<st1.getCount()<<endl;
studentst2;st2.print();cout<<st2.getCount()<<endl;
studentst3;st3.print();cout<<st3.getCount()<<endl;
return0;}class
student{public:student();
voidprint();
intgetCount();private:
intcount=0;
intstudentNo=0;};Result:studentNo:11studentNo:11studentNo:11StaticMembersCountisnotdatamemberofthestudentclassintcount=0;class
student{public:student();
voidprint();
intgetCount();private:
intstudentNo=0;};student::student(){::count++;studentNo=::count;}void
student::print(){cout<<
"studentNo:"
<<studentNo<<endl;}int
student::getCount(){
return::count;}intmain(){
studentst1;st1.print();cout<<st1.getCount()<<endl;
studentst2;st2.print();cout<<st2.getCount()<<endl;
studentst3;st3.print();cout<<st3.getCount()<<endl;
return0;}studentNo:11studentNo:22studentNo:33StaticMembersclass
student{public:student();voidprint();private:intstudentNo=0;static
intcount;//thenumber};int
student::count=0;student::student(){count++;studentNo=count;}void
student::print(){cout<<"studentNo:"<<studentNo<<";count="<<count<<endl;}StaticdatamemberStaticdatamember’sinitialization:Mustbeplacedoutsidetheclass.intmain(){studentst1;st1.print();studentst2;st2.print();studentst3;st3.print();return0;}studentNo:1;count=1studentNo:2;count=2studentNo:3;count=3StaticMembersSt1StudentclassSt2St3countstudentNostudentNostudentNoStaticdatamember
isavariablethatispartofaclass,yetisnotpartofanobjectofthatclass.StaticMembersclass
student{public:student();//constructorvoidprint();private:intstudentNo=0;static
intcount;//thenumber};int
student::count=0;student::student()//constructor{count++;studentNo=count;cout<<
"count'saddress:"
<<&count<<endl;cout<<
"studentNo'saddress:"
<<&studentNo<<endl;}intmain(){
studentst1;cout<<
"st1'saddress:"
<<&st1
<<
"st1'ssize:"
<<
sizeof(st1)<<endl;studentst2;cout<<
"st2'saddress:"
<<&st2
<<
"st2'ssize:"
<<
sizeof(st2)<<endl;studentst3;cout<<
"st3'saddress:"
<<&st3
<<
"st3'ssize:"
<<
sizeof(st2)<<endl;return0;}count'saddress:0015D138studentNo'saddress:00EFFC90st1'saddress:00EFFC90st1'ssize:4count'saddress:0015D138studentNo'saddress:00EFFC84st2'saddress:00EFFC84st2'ssize:4count'saddress:0015D138studentNo'saddress:00EFFC78st3'saddress:00EFFC78st3'ssize:4StaticMemberFunctionsStaticmemberfunction
isafunctionthatneedsaccesstomembersofaclass,yetdoesnotneedtobeinvokedforaparticularobject.class
student{public:student();//constructorstatic
intgetCount();voidprint();private:intstudentNo;static
intcount;};Staticmemberfunctionint
student::count=0;student::student()//constructor{count++;studentNo=count;}void
student::print(){cout<<"studentNo:"<<studentNo<<endl;}int
student::getCount(){returncount;}StaticMember
Functionsclass
student{public:student();//constructorstatic
intgetCount();voidprint();private:intstudentNo;static
intcount;};Staticmemberfunctionint
student::count=0;student::student()//constructor{count++;studentNo=count;}void
student::print(){cout<<"studentNo:"<<studentNo<<endl;}int
student::getCount(){returncount;}intmain(){studentst1;st1.print();cout<<"studentnumberis"<<student::getCount()<<endl;studentst2;st2.print();cout<<"studentnumberis"<<student::getCount()<<endl;studentst3;st3.print();cout<<"studentnumberis"<<st3.getCount()<<endl;return0;}StaticMembersint
student::getCount(){studentNo++;//error:accesstonon-staticmember
returncount;//ok}Staticmemberfunctionsarenotattachedtoanyobject,thatis,theydonothavethispointer.Staticmemberfunctionscanonlyaccessstaticdatamembers.04FreeStoreFreeStoreLiteralconstdataStack(automaticstorage)Freestore(Heap)constantdataFunction’slocalvariables,arguments,returningdataandaddressPotentialavailablememoryGlobal(Staticdata)MemorylayoutGlobalandstaticvariablesintk1=1;intk2;static
intk3=2;static
intk4;intmain(){static
intm1=2,m2;inti=1;char*p;charstr[10]="hello";const
char*q="hello";p=(char*)malloc(100);free(p);return0;}FreeStore-dynamicmemoryAllmemoryneedsweredeterminedbeforeprogramexecutionbydefiningthevariableneeded.Buttheremaybecaseswherethememoryneedsofaprogramcanonlybedeterminedduringruntime.Whenthememoryneededdependonuserinput,
onthesecases,programsneedtodynamicallyallocateandfreememorybyusingnewanddeleteoperatorsinC++.FreeStore-dynamicmemory#include<typeinfo>intmain(){int*intp=new
int;*intp=20;int*intpt=new
int(8);cout<<typeid(intp).name()<<endl;cout<<typeid(intpt).name()<<endl;cout<<*intp<<""<<*intpt<<endl;deleteintp;deleteintpt;return0;}(malloc/freeinC)int*p=(int*)malloc(sizeof(p));AvoidmemoryleakResult:int*int*208QueriesinformationofatypeFreeStore-dynamicmemoryintmain(){intm;cout<<"Enteraninteger:";cin>>m;int*ptr=new
int[m];//dynamicone-dimensionalarrayif(ptr==NULL) cout<<"Error:memorycouldnotbeallocated";else{for(inti=0;i<m;i++)cin>>ptr[i];for(inti=0;i<m;i++)cout<<ptr[i]<<",";delete[]ptr;}int(*p)[4]=new
int[m][4];//dynamictwo-dimensionalarrayfor(inti=0;i<m;++i)for(intj=0;j<4;++j) p[i][j]=i*j;cout<<typeid(p).name()<<endl;delete[]p;return0;}FreeStoreObjectsAfreestoreobjectiscreatedusingthenewoperatoranddestroyedusingthedeleteoperator.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- LY/T 1849-2024植物新品種特異性、一致性、穩定性測試指南丁香屬
- 2025年中考語文一模試卷-1
- 物理●廣東卷丨2023年廣東省普通高中學業水平選擇性考試物理試卷及答案
- 不予執行36課件
- 考研復習-風景園林基礎考研試題附參考答案詳解(達標題)
- 現代化工產業園精細磷化工廠房及配套設施項目可行性研究報告寫作模板-申批備案
- 風景園林基礎考研資料試題及參考答案詳解(a卷)
- 2025-2026年高校教師資格證之《高等教育法規》通關題庫附答案詳解(a卷)
- 2024年濱州新能源集團有限責任公司及權屬公司公開招聘工作人員遞補筆試備考題庫附答案詳解(完整版)
- 2025年K2學校STEM課程實施效果評估與教育評價體系構建報告
- 呈閱件(清流縣城市管理辦法)
- 公務員職務與及職級并行規定課件
- 紅河縣年產50噸珍珠棉建設項目環評報告
- 術中大出血的搶救及護理配合
- 四川甘孜州遴選(考調)公務員39人2024年國家公務員考試考試大綱歷年真題420筆試歷年難易錯點考題薈萃附帶答案詳解
- 商務英語聽說-對外經濟貿易大學中國大學mooc課后章節答案期末考試題庫2023年
- 第十二講 建設社會主義生態文明PPT習概論2023優化版教學課件
- 國家濕地公園總體規劃導則
- 閬中張飛牛肉名稱的來歷
- 2021上半年江津區社區專職工作者《綜合基礎知識》試題
- 2023上海虹口區初三語文一模作文寫作指導及范文:這也是我的舞臺
評論
0/150
提交評論