VisualC++面向?qū)ο蟪绦蛟O(shè)計(jì)教程與實(shí)驗(yàn)(第二版)清華大學(xué)出版社第3章習(xí)題參考答案_第1頁
VisualC++面向?qū)ο蟪绦蛟O(shè)計(jì)教程與實(shí)驗(yàn)(第二版)清華大學(xué)出版社第3章習(xí)題參考答案_第2頁
VisualC++面向?qū)ο蟪绦蛟O(shè)計(jì)教程與實(shí)驗(yàn)(第二版)清華大學(xué)出版社第3章習(xí)題參考答案_第3頁
VisualC++面向?qū)ο蟪绦蛟O(shè)計(jì)教程與實(shí)驗(yàn)(第二版)清華大學(xué)出版社第3章習(xí)題參考答案_第4頁
VisualC++面向?qū)ο蟪绦蛟O(shè)計(jì)教程與實(shí)驗(yàn)(第二版)清華大學(xué)出版社第3章習(xí)題參考答案_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、1為什么要引入構(gòu)造函數(shù)和析構(gòu)函數(shù)?對象的初始化是指對象數(shù)據(jù)成員的初始化,在使用對象前,一定要初始化。由于數(shù)據(jù)成員一般為私有的(private),所以不能直接賦值。對對象初始化有以下兩種方法:類中提供一個(gè)普通成員函數(shù)來初始化,但是會(huì)造成使用上的不便(使用對象前必須顯式調(diào)用該函數(shù))和不安全(未調(diào)用初始化函數(shù)就使用對象)。當(dāng)定義對象時(shí),編譯程序自動(dòng)調(diào)用構(gòu)造函數(shù)。析構(gòu)函數(shù)的功能是當(dāng)對象被撤消時(shí),釋放該對象占用的內(nèi)存空間。析構(gòu)函數(shù)的作用與構(gòu)造函數(shù)正好相反,一般情況下,析構(gòu)函數(shù)執(zhí)行構(gòu)造函數(shù)的逆操作。在對象消亡時(shí),系統(tǒng)將自動(dòng)調(diào)用析構(gòu)函數(shù),執(zhí)行一些在對象撤消前必須執(zhí)行的清理任務(wù)。類的公有、私有和保護(hù)成員之間的

2、區(qū)別是什么?私有成員private:私有成員是在類中被隱藏的部分,它往往是用來描述該類對象屬性的一些數(shù)據(jù)成員,私有成員只能由本類的成員函數(shù)或某些特殊說明的函數(shù)(如第4章講到的友員函數(shù))訪問,而類的外部根本就無法訪問,實(shí)現(xiàn)了訪問權(quán)限的有效控制,使數(shù)據(jù)得到有效的保護(hù),有利于數(shù)據(jù)的隱藏,使內(nèi)部數(shù)據(jù)不能被任意的訪問和修改,也不會(huì)對該類以外的其余部分造成影響,使模塊之間的相互作用被降低到最小。private成員若處于類聲明中的第一部分,可省略關(guān)鍵字private。公有成員public:公有成員對外是完全開放的,公有成員一般是成員函數(shù),它提供了外部程序與類的接口功能,用戶通過公有成員訪問該類對象中的數(shù)據(jù)。

3、保護(hù)成員protected:只能由該類的成員函數(shù),友元,公有派生類成員函數(shù)訪問的成員。保護(hù)成員與私有成員在一般情況下含義相同,它們的區(qū)別體現(xiàn)在類的繼承中對產(chǎn)生的新類的影響不同,具體內(nèi)容將在第5章中介紹。缺省訪問控制(未指定private、protected、public訪問權(quán)限)時(shí),系統(tǒng)認(rèn)為是私有private成員。什么是拷貝構(gòu)造函數(shù),它何時(shí)被調(diào)用?拷貝構(gòu)造函數(shù)的功能是用一個(gè)已有的對象來初始化一個(gè)被創(chuàng)建的同類對象,是一種特殊的構(gòu)造函數(shù),具有一般構(gòu)造函數(shù)的所有特性,當(dāng)創(chuàng)建一個(gè)新對象時(shí)系統(tǒng)自動(dòng)調(diào)用它;其形參是本類對象的引用,它的特殊功能是將參數(shù)代表的對象逐域拷貝到新創(chuàng)建的對象中。在以下四種情況下系

4、統(tǒng)會(huì)自動(dòng)調(diào)用拷貝構(gòu)造函數(shù):用類的一個(gè)對象去初始化另一個(gè)對象catcat1;catcat2(catl);/創(chuàng)建cat2時(shí)系統(tǒng)自動(dòng)調(diào)用拷貝構(gòu)造函數(shù),/用cat1初始化cat2。用類的一個(gè)對象去初始化另一個(gè)對象時(shí)的另外一種形式Catcat2=cat1;/注意并非catcat1,cat2;cat2=cat1;對象作為函數(shù)參數(shù)傳遞時(shí),調(diào)用拷貝構(gòu)造函數(shù)。f(cata)/定義f函數(shù),形參為cat類對象catb;/定義對象bf(b);/進(jìn)行f函數(shù)調(diào)用時(shí),系統(tǒng)自動(dòng)調(diào)用拷貝構(gòu)造函數(shù)如果函數(shù)的返回值是類的對象,函數(shù)調(diào)用返回時(shí),調(diào)用拷貝構(gòu)造函數(shù)。設(shè)計(jì)一個(gè)計(jì)數(shù)器類,當(dāng)建立該類的對象時(shí)其初始狀態(tài)為0,考慮為計(jì)數(shù)器定義哪些

5、成員?/counter.h#ifndefcounter_h#definecounter_hclasscounterprivate:intcount;public:counter();voidsetCount(inti);intgetCount();voiddisplayCount();voidincrementCount();voiddecrementCount();counter();#endif/counter.cpp#includecounter.h#includecounter:counter()count=0;voidcounter:displayCount()coutcounten

6、dl;intcounter:getCount()returncount;voidcounter:setCount(inti)count=i;voidcounter:incrementCount()count+;voidcounter:decrementCount()count-;/MAIN.CPP#includecounter.h#includevoidmain()counterc1;c1.displayCount();c1.setCount(4);c1.displayCount();for(inti=0;i=10;i+)c1.incrementCount();c1.displayCount(

7、);5.定義一個(gè)時(shí)間類,能提供和設(shè)置由時(shí)、分、秒組成的時(shí)間,并編寫出應(yīng)用程序,定義時(shí)間對象,設(shè)置時(shí)間,輸出該對象提供的時(shí)間。#includeclassTimeinthour,minute,second;public:Time(inth=0,intm=0,ints=0)hour=h;minute=m;second=s;voidsetHour(inth)hour=h;voidsetMinute(intm)minute=m;voidsetSecond(ints)second=s;voiddisplay()couthour:minute:secondendl;voidmain()Timet;t.dis

8、play();t.setHour(13);t.setMinute(15);t.setSecond(30);t.display();6.設(shè)計(jì)一個(gè)學(xué)生類student,它具有的私有數(shù)據(jù)成員是:注冊號、姓名、數(shù)學(xué)、英語、計(jì)算機(jī)成績;具有的公有成員函數(shù)是:求三門課總成績的函數(shù)sum;求三門課平均成績的函數(shù)average;顯示學(xué)生數(shù)據(jù)信息的函數(shù)print;獲取學(xué)生注冊號的函數(shù)get_reg_num;設(shè)置學(xué)生數(shù)據(jù)信息的函數(shù)set_stu_inf。編制主函數(shù),說明一個(gè)student類對象的數(shù)組并進(jìn)行全班學(xué)生信息的輸入與設(shè)置,而后求出每一學(xué)生的總成績、平均成績、全班學(xué)生總成績最高分、全班學(xué)生總平均分,并在輸入

9、一個(gè)注冊號后,輸出該學(xué)生有關(guān)的全部數(shù)據(jù)信息。#include#includeusingnamespacestd;classStudentprivate:intnum;charname10;floatmath;floatenglish;floatcomputer;public:voidset_stu_inf(intn,char*ch,floatm,floate,floatc)num=n;strcpy(name,ch);math=m;english=e;computer=c;floatsum()return(math+english+computer);floataverage()return(m

10、ath+english+computer)/3;intget_reg_num()returnnum;voidprint()cout學(xué)號:numendlqweazx;if(q=0)break;stucount+.set_stu_inf(q,we,a,z,x);if(maxa+z+x);elsemax=a+z+x;aver+=(a+z+x);/輸出所有學(xué)生信息cout學(xué)生信息為:endlendl;for(i=0;icount;i+)stui.print();coutendl;cout全班學(xué)生總成績最高分為maxendlq;for(i=0;icount;i+)if(q=stui.get_reg_nu

11、m()cout此學(xué)生信息為:endl;stui.print();break;if(i=count)cout查無此人endl;7.模擬棧模型的操作,考慮順序棧和鏈棧兩種形式。鏈棧:#includeiostream.hclassStackstructNodeintcontent;Node*next;*top;public:Stack()top=NULL;boolpush(inti);boolpop(int&i);/定義堆棧類/構(gòu)造函數(shù)的定義壓棧成員函數(shù)的聲明彈棧成員函數(shù)的聲明/壓棧成員函數(shù)的定義boolStack:push(inti)Node*p=newNode;if(p=NULL)coutcon

12、tent=i;p-next=top;top=p;returntrue;boolStack:pop(int&i)/彈棧成員函數(shù)的定義if(top=NULL)coutnext;i=p-content;deletep;returntrue;voidmain()Stackst1,st2;intx;for(inti=1;i=5;i+)st1.push(i);st2.push(i);coutstack1:endl;for(i=1;i=3;i+)st1.pop(x);coutxendl;/定義對象stl和st2/壓棧成員函數(shù)的調(diào)用/壓棧成員函數(shù)的調(diào)用/彈棧成員函數(shù)的調(diào)用st1.push(20);for(i=1;i=4;i+)i

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論