版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第二章類中數(shù)據(jù)與函數(shù)第一節(jié)數(shù)據(jù)成員6、成員第二節(jié)函數(shù)成員第三節(jié)函數(shù)第四節(jié)運算符重載const第一節(jié)例程2-usingnamespaceusingnamespace第3第3classDate(intclassDate(intY,intM,intthis->Year=this->Month=this->Day=}voidcout<<this->Year<<"-"<<this->Month<<"-"<<this-}intYear,Month, (stringName,bool,intYear,intMonth,intthis->Name=this->=}stringboolDateBirthintreturn}5678第15 例程2-usingnamespaceusingnamespaceclasscout<<"inpartConstructor!"<<}class第第PAGE10cout<<cout<<"incontainerConstructor!"<<}partintcontainer//先輸出inpartConstructor!后輸出incontainerreturn2、類成包括數(shù)據(jù)成員和函數(shù)成員,也包括public成員,也包括private成員。即B是A的類,則B可以A的所有。friend是單向關系,即B是A的類,但A不默認為是B的類。例程2-3是類關系的應用示例。例程2-usingnamespaceclassusingnamespaceclassfriendclassvoidcout<<Year<<"-"<<Month<<"-"<<}unsignedintYear,Month,classvoidAa.Year=2000,a.Month=12,a.Day=}intBreturn345678第14第18第21在例程2-3中,classA中申明classB是A的類(第5行)。在B中可以A的私有成員,也可以A的共有成員。類有時可以23-24行輸出結(jié)果將變?yōu)椋骸癐nAConstructor!”、“InBOXConstructor!”和8。原因是如果沒有第12行,則A類沒有實例化,也就不例程2-usingnamespaceclassusingnamespaceclassclassprivate:intint//Acout<<"InAConstructor!"<<}cout<<"InBOXConstructor!"<<}intBOXmyBox;//輸出:InBOXcoutsizeofBOX;//輸出:4,為一個intreturn345678例程2-usingnamespaceusingnamespace5678
classLink{structvoidpush_back(intpushValue);Node&getFirstNode();第16第17
Node*firstNode;//第一個節(jié)點第43第44
structintNode*prevNode;Node*nextNode; this->firstNode=nullptr;this->lastNode=nullptr;}Node*nowNodePtr;if(this->firstNode!=nullptr){nowNodePtr=this->firstNode;while(true){nextNodePtr=nowNodePtr->nextNode;deletenowNodePtr;nowNodePtr=if(nowNodePtr==}}
voidLink::push_back(int第第PAGE48if(this->firstNode==if(this->firstNode==this->firstNode=newthis->firstNode->data=this->firstNode->prevNode=this->firstNode->nextNode=this->lastNode=this-Node*tmpNode=newtmpNode->data=tmpNode->nextNode=this->lastNode->nextNode=tmpNode->prevNode=this-this->lastNode=}}Link::Node&return*(this-}intLinkfor(inti=0;i<10;Link::NodemyNode=coutmyNode.dataendlcoutmyNode.nextNode->nextNode->nextNode->dataendl;/return}(instancedatamember)或?qū)嵗龜?shù)據(jù)域(instancedatafield)。如果需要所有對象共享數(shù)據(jù)成員,可以用用static關鍵字修飾該成員,這種成員稱之為靜態(tài)數(shù)據(jù)成員(staticdatamember)或類共享變量(classsharevariable)。除了靜態(tài)數(shù)據(jù)成員外,還可以生命一個函數(shù)例程2-usingnamespaceusingnamespaceclass第6第6Circle(doubler=Circle(doubler=0.0):Radius(r){Count++;cout<<"InConstructor!";~Circle(){Count--;cout<<"InDeconstructor!";staticunsignedintgetCount(){returnCount;doublegetArea(){returnthis->PI*this->Radius*this->Radius;doublegetPerimeter(){returnthis->PI*this->Radius*2;constdoublePI intCircle::Count0intCirclearrCircle[]={Circle(1.0),Circle(2.0),<<"\cout"\nShapeBytessizeofCircleendl;//輸出值為return}8 為對象,生成后很快被析構釋放。6、成員第二節(jié)例程2-usingnamespaceusingnamespaceclassvoidsetNum(intUP,int}void}void}intintintUpDown}第第第第第7中,沒有與類名相同的函數(shù)存在。在源代碼編譯過程中,會自動生成構造函數(shù),這就是隱式構造函數(shù)。對開發(fā)人員而言,該構造函數(shù)似乎并不存在,但在對象生成過程中,仍然將調(diào)用自動形成的構造函數(shù)。在執(zhí)行例程第19行UpDownUD時,將自動調(diào)用隱式構UpDownUD0將出現(xiàn)錯誤。例程2-usingnamespaceclassusingnamespaceclass}UpDown(intUp,intvoidsetNum(intUP,int}void}int345678第16第17第19第20intintintintUpDownUD1(1,2);//調(diào)用:UpDown(intUp,int}注意:當調(diào)用隱式構造函數(shù)或者調(diào)用無參構造函數(shù)時,對象名稱后不能有括號,如UpDownUD0(),果如此,編譯器將示UD0()為函數(shù)例程2-usingnamespaceusingnamespaceclassUpDown(intUp=1,intvoidsetNum(intUP,int}void}intintint第20第24第25}}例程2-usingnamespaceusingnamespaceclassUpDown(intUp=1,intstd::cout<<"NowExitUpDown}voidsetNum(intUP,int}void}intintintUpDownstd::cout<<"NextExecuting'returnreturn}int5678第17第20第21第23第26第28第37第第PAGE39}圖2-1例程2-10例程2-usingnamespaceusingnamespaceclassArr(int}voidintcount=this-}voidintcount=this-}delete[]this-}int678第16第18第19第22第22int*intint*intArrreturn}例程2-usingnamespaceusingnamespaceclassUpDown(intUp=1,intstd::cout<<"NowExitUpDown}UpDown(UpDownstd::cout<<"Copy}voidsetNum(intUP,int}void}intint345678第14第17第18第20第23第24intUpDownintUpDownrtnUD(UpDownstd::cout<<"Printinputstd::cout<<"NextExecuting'returnreturn}intreturn}圖2-2例程2-12例程2-UpDown(UpDownstd::cout<<"CopyUpDown(UpDownstd::cout<<"Copy}圖2-3例程2-UpDownrtnUD(UpDownUD){//刪除&std::cout<<"PrintUpDownrtnUD(UpDownUD){//刪除&std::cout<<"Printinputstd::cout<<"NextExecuting'returnreturn}圖2-4從圖2-4中可以看出多執(zhí)行了1次拷貝構造函數(shù)和析構函數(shù),原因是當參數(shù)變?yōu)閁pDownrtnUD(UpDownUD)后,參數(shù)傳遞變?yōu)閭髦?,將造函?shù)創(chuàng)建新的對象時,無需執(zhí)行構造函數(shù),一般說來將提高效率。但是,默認的拷貝構造函數(shù)只能簡單數(shù)據(jù),當這樣的工作不能滿例程usingusingnamespaceclassArr(int}voidinitNum(intintcount=this-}void第第第第第第第第行intcount=this-intcount=this-}delete[]this-}intint*intArrArrreturn}圖2-5例程2-15從圖中可以看出,當執(zhí)行拷貝構造函數(shù)后(第31行ArrmyArr2=myArr)后第33行myArr2的輸出與myArr輸出一致。當執(zhí)行delete[]this->ptr語句將釋放同一內(nèi)存塊兩次。例程2-15增加拷貝構造函數(shù)如例程2-16所示,其執(zhí)行結(jié)果如圖2-6所示。例程2-Arr(ArrArr(Arr}圖2-6例程2-15 第三節(jié)函例程第 第 usingnamespace第行第行class第行第行UpDown(intUp=1,int第行第行第行第16第17
friendUpDownPlus(UpDownlUD,UpDownrUD);//刪除該行,會發(fā)生什么?voidprint(){}intupNum;intdownNum;第23
UpDownPlus(UpDownlUD,UpDownreturn}intUpDown第25第25第27
return0;第四節(jié)運算符重載例程usingusingnamespaceclassUpDown(intUp=1,intUpDown&operator+(intreturn}UpDown&operator+=(intreturn}friendUpDownoperator+(inti,UpDownUpDown&operator=(intreturn}void}第第第第第第第第行第15第16第18第21第23第27第27intreturnintreturnthis-}intreturnthis-}intintUpDownoperator+(UpDown&left,UpDownreturn}UpDownoperator+(inti,UpDownreturn}intUpDownUpDownUpDownUpDownreturn}例程usingusingnamespaceclassUpDown(intUp=1,int}UpDown(UpDown第第第第第第第第行}UpDown&operator=(UpDown}UpDown&operator=(UpDownreturn}intintreturn}例程2-usingnamespaceusingnamespaceclassArray(intpointer=new}int&operator[](intreturn}intintintArrayfor(int345678第17for(intreturnfor(intreturn}例程2-usingnamespacestructusingnamespacestructlessThan(intbooloperator()(intreturn} te<typenamevoidprintIF(T*Head,T*Tail,lessThanfor(T}}intintreturn}345678第11 第五節(jié)類中函數(shù)與程2-22所示,其第15、22行的函數(shù)名稱intgetUp()const和intgetDown()const后均出現(xiàn)const關鍵字,其功能是在函數(shù)作用范圍內(nèi)不能例程2-usingnamespaceclassusi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 邊境安全培訓班簡報課件
- 企業(yè)環(huán)保環(huán)境保護管理培訓課件
- 車隊安全服務培訓內(nèi)容課件
- 《廣播和電視》物理授課課件
- 車間級安全教育培訓心得課件
- (2026年)關于國家網(wǎng)絡安全宣傳周心得體會(2篇)
- 2025年幼兒園普惠性政策落實與公益服務推進專項總結(jié)(2篇)
- 車間管理培訓教學課件
- 2026年焊工職業(yè)技能考試筆試試題含答案
- 車間班組安全培訓教材教學課件
- 2026年大連職業(yè)技術學院單招職業(yè)技能筆試參考題庫帶答案解析
- 河南省開封市2026屆高三年級第一次質(zhì)量檢測歷史試題卷+答案
- 員工通勤安全培訓課件
- (自2026年1月1日起施行)《增值稅法實施條例》的重要變化解讀
- 2025年游戲陪玩分成協(xié)議
- 全國秸稈綜合利用重點縣秸稈還田監(jiān)測工作方案
- 2026年內(nèi)蒙古化工職業(yè)學院單招職業(yè)適應性考試參考題庫及答案解析
- 國家事業(yè)單位招聘2024國家水利部小浪底水利樞紐管理中心招聘事業(yè)單位人員擬聘用人員筆試歷年參考題庫典型考點附帶答案詳解(3卷合一)
- 核生化應急救援中心火災預案
- 25數(shù)五上數(shù)學人教版期末押題卷5套
- 2026年遼寧金融職業(yè)學院單招職業(yè)適應性測試題庫及參考答案詳解
評論
0/150
提交評論