版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、實驗二 類與對象實驗?zāi)康暮鸵?掌握類、類的數(shù)據(jù)成員、類的成員函數(shù)的定義方式。2理解類成員的訪問控制方式。3掌握對象的定義和操作對象的方法。4理解構(gòu)造函數(shù)和析構(gòu)函數(shù)的定義與執(zhí)行過程。5掌握重載構(gòu)造函數(shù)的方法。 6了解拷貝構(gòu)造函數(shù)的定義方法。實驗容1下面程序中有錯,在不刪除和增加代碼行的情況下,改正錯誤語句,使其正確運行。#include<iostream.h>class Aapublic:Aa(int i=0)a=i;cout<<"Constructor "<<a<<endl;Aa()cout<<"Des
2、tructor "<<a<<endl;void print()cout<<a<<endl;private:int a;int main()Aa al(1),a2(2);al.print();cout<<a2.a<<endl;return 0;2檢查下面的程序,找出其中的錯誤,并改正。然后上機調(diào)試,使程序能正常運行。(1)#include<iostream.h>class Datevoid set_date();void show_date();int year;int month;int day;Da
3、te d;int main()set_date(); show_date();void set_date() cin>>d.year; cin>>d.month; cin>>d.day;void show_date() cout<<d.year<<'/'<<d.month<<'/'<<d.day<<endl;(2)#include<iostream.h>class Apublic:void A(int i=0)m=i;void show() c
4、out<<m<<endl;void A()private:int m;int main()A a(5); a.m+=10; a.show(); return 0;(3) #include<iostream.h> class Xprivate:int a=0;int &b;void setA(int i)a=i;X(int i)a=i;public:int X()a=b=0;X(int i,int j)a=i;b=j;void setC(int k)c=c+k;void main()X x1;X x2(2);X x3(1,2); x1.setA(3);
5、3調(diào)試下列程序。#include<iostream.h>class TPointprivate:int X,Y;public:TPoint(int x,int y)X=x;Y=y;cout<<"Constructor is called"<<endl;TPoint(TPoint &p);TPoint() cout<<"Destructor is called"<<endl;int getx() return X; int gety() return Y; ;TPoint:TPoint(T
6、Point &p)X=p.X;Y=p.Y;cout<<"Copy-initialization Constructor is called"<<endl;void main()TPoint p1(4,9);TPoint p2(p1);TPoint p3 = p2; cout<<"p3=("<<p3.getx()<<","<<p3.gety()<<")"<<endl;(1) 寫出程序的輸出結(jié)果,并解釋輸出結(jié)果。(2
7、) 按下列要求進行調(diào)試: 在主函數(shù)體,添加下列說明語句:TPoint p4,p5(2);調(diào)試程序會出現(xiàn)什么現(xiàn)象?為什么?如何解決? (提示: 對已有的構(gòu)造函數(shù)進行適當(dāng)修 改)結(jié)合運行結(jié)果分析如何使用不同的構(gòu)造函數(shù)創(chuàng)建不同的對象。( 3)在主函數(shù)使用 new 創(chuàng)建不同參數(shù)動態(tài)兩個動態(tài)對象,輸出其坐標,并用 delete 刪 除之。運行程序,分析運行結(jié)果。(4) 在程序中定義個全局對象,在主函數(shù)最前添加語句: cout<<"Enter main"<<endl;運行程序,分析運行結(jié)果。4 完善程序,并寫出運行結(jié)果根據(jù)程序要求,完善程序后輸入源程序,編譯連接
8、,并寫出運行結(jié)果。如果某個自然數(shù)除了1和它本身外還有其他因子,則這個自然數(shù)就是合數(shù)(非素數(shù))。試定義一個類 NUM,從3開始向上試探找出n個連續(xù)的自然數(shù),且它們都是合數(shù)。當(dāng)找到第一組連續(xù)的n個合數(shù)后,即停止查找。具體要求如下:(1) 私有成員int n :存放滿足條件的連續(xù)自然數(shù)的個數(shù)。int *p:根據(jù)n的值申請一個動態(tài)數(shù)組用來存放求出的滿足條件的n個自然數(shù)。(2) 公有成員函數(shù)NUM(int n1):構(gòu)造函數(shù),用n1初始化n,根據(jù)n的值申請動態(tài)數(shù)組空間,使p指向該動態(tài)數(shù)組空間。int yes(int x):判斷x是否為合數(shù)。如果是,返回 1,否則返回0。void fun():從3開始向上試
9、探找出 n個連續(xù)的自然數(shù),且它們都是合數(shù),并依次存入動 態(tài)數(shù)組。void print():輸出滿足條件的n個合數(shù)。NUM():析構(gòu)函數(shù),釋放動態(tài)數(shù)組所占用的存儲空間。(3) 在主函數(shù)中定義一個NUM類的對象num,求出10個連續(xù)的合數(shù)。然后通過對象 num調(diào)用成員函數(shù)求出10個連續(xù)的合數(shù),并輸出計算結(jié)果。#in clude <iostream.h>class NUM定義數(shù)據(jù)類NUMprivate:int n; int *p;public:NUM(i nt n1)n=n1;p=_;動態(tài)分配存放連續(xù)合數(shù)的存儲空間int yes(i nt x)for(int i=2;i<=x/2;
10、i+) if (x%i=0)return 1;return 0;void fun( void)int j;for(int i=3;1;i+)j=0;while(&&j<n)Pj=i;j+;i+;if(j=n)break;void prin t(void)cout<<"找到的"<<n<<"個連續(xù)合數(shù)為:"<<endl;for(i nt i=0;i <n ;i+)cout<<pi<<""cout<<e ndl;NUM();/釋放
11、在構(gòu)造函數(shù)中申請的存儲空間;void mai n()cout<<"請輸入要求的連續(xù)合數(shù)的個數(shù)(例如10):"int n;cin»n;NUM num( n); 尋找連續(xù)的合數(shù),并存入動態(tài)申請的存儲空間中 ; /輸出尋找到的合數(shù)5. 請定義一個矩形類(Rectangle),私有數(shù)據(jù)成員為矩形的長度(len)和寬度(wid),缺省構(gòu)造函數(shù)置len和wid為0,有參構(gòu)造函數(shù)置len和wid為對應(yīng)形參的值,另外還包括求矩形周長、 求矩形面積、取矩形長度和寬度、修改矩形長度和寬度為對應(yīng)形參的值、輸出矩形尺寸等公有成員函數(shù)。要求輸出矩形尺寸的格式為“l(fā)ength :
12、長度,width :寬度”。編寫主函數(shù)對定義的類進行測試。6. 聲明一個時間類,時間類中有3個私有數(shù)據(jù)成員(Hour, Mi nute , Seco nd)和兩個公有成員函數(shù)(SetTime和PrintTime)。SetTime根據(jù)傳遞的3個參數(shù)為對象設(shè)置時間;PrintTime負責(zé)將對象表示的時間顯示輸出,輸出格式為“Hour: Mi nute : Seco nd”。(1) 在主函數(shù)中,建立一個時間類的對象,設(shè)置時間為9點20分30秒并顯示該時間。(2) 使用構(gòu)造函數(shù)代替上面的SetTime成員函數(shù),并在主函數(shù)中使用構(gòu)造函數(shù)設(shè)置時 間為10點40分50秒,并顯示該時間。(3) 重載時間類的構(gòu)
13、造函數(shù)(不帶參數(shù))使小時、分、秒均為0。(4) 在時間類的析構(gòu)函數(shù)中輸出"Good bye!”(5) 定義拷貝構(gòu)造函數(shù)并調(diào)用。7下面是一個整型鏈表類intList 的聲明,請給出該類所有數(shù)據(jù)成員的類外定義,并在主函數(shù)中測試該類。class intListprotected:struct Nodeint data;Node *next;Node *L;public:intList();/構(gòu)造函數(shù)intList();/析構(gòu)函數(shù)bool Insert(int i,int elem);bool Remove(int i,int &elem);刪除鏈表的第i個位置的元素,刪除成功返回t
14、rue,失敗返回falseint Find(int elem);在鏈表中查找值為elem的元素,找到返回該元素在鏈表中的位置,否則返回0int Length();/返回鏈表長度(元素個數(shù))void PrintList();/輸出鏈表;參考答案(非權(quán)威,僅僅是我自己的理解,如有錯誤, 歡迎批評指正!)第一題:#i nclude<iostream.h>class Aapublic:Aa( int i=0)a=i;cout<<"C on structor "<<a<<e ndl; Aa()cout<<"Dest
15、ructor "<<a<<e ndl;void prin t()cout<<a<<e ndl;private:;int a;int main() Aa al(1),a2(2); al.pri nt(); a2.pri nt(); return 0;* 'D:C *Deb l g2. exe-Cu tic 1Constructor' ZLZDe u t i*u.c t o r 2Dcstiruc tor- 1Press <ny TKey Lo contlnute第二題(1)#i nclude<iostream.
16、h> class Datepublic:void set_date(); void show_date();private:;int year; int mon th;int day;Date d;int main()d.set_date(); d.show_date();return 0;void Date:set_date() _cin> >year; cin»month; cin> >day; void Date:show_date() _coutvvyearvv'/'vv mon th<<'/'<
17、<day<<e ndl;(2)#i nclude<iostream.h> class Apublic:A(int i=0) m=i;void show()coutvvmvve ndl;A()frie nd void add(A &);private:int m;;void add(A &a)a.m+=10;int main()A a( 5);add(a);a.show();return 0;(3)#include<iostream.h>class Xprivate:int a,b,c;public:X(int i)a=i;X()a=b=
18、0;X(int i,int j)a=i; b=j;void setC(int k)c=c+k;void setA(int i)a=i;void main()X x1;X x2(2);X x3(1,2);x1.setA(3);第三題void mai n()TPoint p1(4,9); 調(diào)用構(gòu)造函數(shù)初始化plTPoi nt p2(p1);/顯示調(diào)用拷貝構(gòu)造函數(shù)初始化 p2TPoint p3 = p2; 對象之間的賦值,由于之前沒有定義p3,因此用另一個同類的對象給其賦值時,會調(diào)用拷貝構(gòu)造函數(shù)。coutvv"p3=("vvp3.getx()vv","vvp3
19、.gety()vv")"v<endl; /輸出 p3 在賦值后的 x 和y答:調(diào)試程序會程序錯誤,原因是對于無輸入的對象和只要一個輸入值的對象沒 有相應(yīng)的構(gòu)造函數(shù),要解決也挺簡單,就是在說明部分加上相應(yīng)的構(gòu)造函數(shù)就可 以了。修改后的程序如下:#i nclude<iostream.h> class TPointprivate:int X,Y;public:TPoint()X=Y=0; cout<<"A Constructor is called"<<endl;TPoint(int i)X=i;Y=0; cout&l
20、t;<"B Constructor is called"<<endl;TPoint(int x,int y)X=x;Y=y; cout<<"Constructor is called"<<endl;TPoint(TPoint &p);TPoint() cout<<"Destructor is called"<<endl; int getx() return X; int gety() return Y; ;TPoint:TPoint(TPoint &p)
21、X=p.X;Y=p.Y; cout<<"Copy-initialization Constructor is called"<<endl;void main()TPoint p1(4,9); cout<<"p1=("<<p1.getx()<<","<<p1.gety()<<")"<<endl;TPoint p2(p1); cout<<"p2=("<<p2.getx()<&
22、lt;","<<p2.gety()<<")"<<endl;TPoint p3 = p2;coutvv"p3=("vvp3.getx()vv","vvp3.gety()vv")"v<e ndl; TPoi nt p4,p5(2);coutvv"p4=("vvp4.getx()vv","vvp4.gety()vv")"v<e ndl; coutvv"p5=("vvp5.ge
23、tx()vv","vvp5.gety()vv")"v<e ndl;Constriictor Is calledCopy-in It iallzatianConstructorp2=<4,?>Cop y-in it ia llza tzLun Construe tar p3=<4,»>fl Comstrnctor is calledis celledis calledConstructor ig calledp4=<0.0> p5=C2r0> Destructur U)es tructor Dest
24、ructor Destructor Destructoris called is called is called is called is callsdFress 歳ny kev to continue#i nclude<iostream.h>class TPoint private:int X,Y;public:TPoi nt(i nt x,i nt y)X=x;Y=y; cout«"C on structor is called"<<e ndl;TPoi nt(TPoi nt & p);TPoi nt()cout<<
25、;"Destructor is called"<<e ndl;int getx()return X;in t gety()return Y;;TPoi nt:TPoi nt(TPoi nt &p)X=p.X;Y=p.Y; cout«"Copy-initialization Constructor is called"«endl;void mai n()TPoi nt *p仁new TPoi nt(4,9); coutvv"p1=("vvp1->getx()vv","vv
26、p1->gety()vv")"v<e ndl; delete p1;亠褸監(jiān)二'Debug乜劭|匸 |回 De&tFuctor Qa.ll«d Pmss 科ny kpy i:o rnnt inne#i nclude<iostream.h>class TPoi ntprivate:int X,Y;public:TPoint(int x,int y)X=x;Y=y;cout<<"Constructor is called"<<endl;TPoint(TPoint &p);TPoi
27、nt()cout<<"Destructor is called"<<endl;int getx() return X; int gety() return Y; void ShowPoint()cout<<"p1=("<<X<<","<<Y<<")"<<endl;TPoint:TPoint(TPoint &p) X=p.X;Y=p.Y;cout<<"Copy-initialization C
28、onstructor is called"<<endl;void main()cout<<"Enter main"<<endl;TPoint *p1=new TPoint(4,9); p1->ShowPoint();delete p1;S3 RM卄映肛P吐ugQzbEntdr r>a±nConstrustar io called* Y4、Ifest Filet o-l* is 1f*d Press anv key to continue第四題:#i nclude <iostream.h> cla
29、ss NUM定義數(shù)據(jù)類NUMprivate:int n; int *p;public:NUM(i nt n1)n=n1;p=new intn;動態(tài)分配存放連續(xù)合數(shù)的存儲空間int yes(i nt x)for(int i=2;i<=x/2;i+)if (x%i=O)return 1;return 0;void fun(void)int j;for(int i=3;1;i+)j=0;while(yes(i)&&j<n)pj=i;j+;i+;if(j=n) break;void print(void)coutvv"找到的"<<*<&
30、quot;個連續(xù)合數(shù)為:"<<endl;for(int i=0;i<n;i+)cout<<pi<<""cout<<endl;NUM()間;void main()if(p) deletep;/釋放在構(gòu)造函數(shù)中申請的存儲空coutvv"請輸入要求的連續(xù)合數(shù)的個數(shù)(例如10):"int n;cin>>n;NUM num(n);num.fun(); /尋找連續(xù)的合數(shù),并存入動態(tài)申請的存儲空間中num.print() ; /輸出尋找到的合數(shù)第五題:#i nclude<iostream
31、.h>class Recta ngleprivate:int len ,wid;public:Recta ngle()len=wid=0;cout<<"First Con structor is called"<<e ndl;Recta ngle(i nt i,i nt w)len=i;wid=w;cout«"Sec ond Con structor is called"<<e ndl;void Set_Rectangle()cin>>len; cin>>wid;int Get_
32、Perimeter() int Get_Area() int get_len() int get_wid() return 2*(len+wid); return len*wid; return len; return wid; Rectangle() cout<<"Destructor is called"<<endl; ;void main()int temp;Rectangle rect,Default(8,9);cout<<endl;cout<<" 默 認 長 度 : "<<Defaul
33、t.get_len()<<" , "<<" 默 認 寬 度 : "<<Default.get_wid()<<endl;cout<<" 矩形的周長為: "<<Default.Get_Perimeter()<<endl;cout<<" 矩形的面積為: "<<Default.Get_Area()<<endl; cout<<endl;coutvv"是否需要修改參數(shù)(1:修改0:退出)
34、:";cin>>temp;while(temp=1)coutvv"請輸入矩形的長和寬:"<<e ndl;rect.Set_Rectangle();coutvv" 長 度 : "vvrect.get_len()vv" , "vv" 寬 度 : "vvrect.get_wid()vvendl;coutvv"矩形的周長為:"vvrect.Get_Perimeter()v<e ndl;coutvv"矩形的面積為:"vvrect.Get_Area
35、()v<e ndl; coutvvendl;coutvv"是否需要修改參數(shù)(1:修改0:退出):" cin>>temp;coutvvendl;D:C4DebLjg3.exe4F1戶*t Constructor is called Second Construetor called岀 艮-改: 3 粥;般 匱S0B0 3 ? fi nTL1 & 尅為為為為 辛修形 I 度罔面酣罔面 4®的需人 .-的的 認形®X昴 度形形 默矩徂日屋啟血畏矩矩是否需要修改參數(shù)“;修改 陽退岀頭0Itestructor is cn丄丄EdP>
36、es:t:Fiiutc»* is calledL_Pl-ess aou kev to continue第六題:#in clude<iostream.h> class Timeprivate:int Hour,M inu te,Sec ond;public:Time()Hour=Minu te=Sec on d=0; cout<<"First Con structor is called"<<e ndl;Time(i nt x,i nt y,i nt z)Hour=x;Minu te=y;Secon d=z;cout«&
37、quot;Sec ond Con structor is called"<<e ndl;Time(Time &p)Hour=p.Hour;Minute=p.Minute;Second=p.Second;cout<<"Copy Constructor is called"<<endl;void SetTime()cin>>Hour;cin>>Minute;cin>>Second;void PrintTime()cout<<" 時 :"<<Hou
38、r<<" "<<" 分 :"<<Minute<<" "<<"秒:"<<Sec on d<<e ndl;Time() cout<<"Good bye!"<<endl; ;void main()Time time;Time T(10,40,50);Time copy=T;cout«e ndlvv"構(gòu)造函數(shù)時間為:"T.PrintTime();coutvve ndl
39、vv"拷貝構(gòu)造函數(shù)時間為:"copy.PrintTime();coutvvendl;coutvvendlvv"請輸入一個時間(時 /分/秒):"<<endl<<endl;time.SetTime();coutvve ndlvv'你所輸入的時間為:"time.PrintTime();coutvvendl; D:C + 4- 3SDeb ug2 曰畑First Constructoi* is calledSecond Construe tot* is calledpnu* Constructor is called+
40、勾適函數(shù)時間知時必 分說 秒汚0 札風(fēng)構(gòu)適函數(shù)時間為匕E寸皿分:處秒瀉B請輸八一血間(時勺”秒)=9293S柿所輸入的時間為,時沔 分咖 =30£«iCdl hyie*Koo«l byeTood. by>ofri'ca-s any key to Go*ntinuv第七題:#i nclude <iostream> using n amespace std;class in tListprotected:struct Nodeint data;Node * n ext;;Node * L;public:in tList();構(gòu)造函數(shù)intLi
41、st(); / 析構(gòu)函數(shù)bool Insert(int i, int elem) ; /向鏈表的第i個位置插入元素 elem,插入成功返回true,失敗返回falsebool Remove(int i, int &elem) ;/刪除鏈表的第 i個位置的元素 elem,刪除成功返回true,失敗返回falseint Find(int elem); /查找值為elem的元素,返回該元素在鏈表的位置int Length() ;/返回鏈表長度 void PrintList();/ 輸出鏈表 ;intList:intList()/ 構(gòu)造函數(shù)L=new Node; L->next=NULL
42、; cout<<"Constructor is called"<<endl<<endl; intList:intList()/析構(gòu)函數(shù)Node *p,*q;p=L;while ( p->next != NULL )q=p->next;delete p;p=q;delete p;L=NULL; cout<<endl<<"Good bye!"<<endl;bool intList:lnsert(int i,int elem) 向鏈表的第i個位置插入元素 elem,插入成功 返回true,失敗返回falseNode *p,*s;int j;p= L;j=0;while ( (p!=NULL ) && (j<i-1)p=p->next;j+;if ( (p!=NULL )&& (j=i-1)s=new Node;s->data=elem;s->next=p->next;p->next=s;retu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 社會實踐部的述職報告
- 櫥柜銷售經(jīng)理工作總結(jié)
- 家鄉(xiāng)環(huán)境建議書
- 微教育閱讀心得7篇
- 蔬菜年終總結(jié)6篇
- 市政道路監(jiān)理會議紀要范文(3篇)
- 銷售主管工作匯報模板4篇
- 2024年危險化學(xué)品經(jīng)營單位主要負責(zé)人理論試題及答案
- 2024年P(guān)A11項目資金籌措計劃書代可行性研究報告
- 2024年衡器項目資金需求報告
- 系統(tǒng)集成項目管理工程師(基礎(chǔ)知識、應(yīng)用技術(shù))合卷軟件資格考試(中級)試題及解答參考(2025年)
- 廣東省珠海市第十六中學(xué)2024-2025學(xué)年上學(xué)期期中質(zhì)量監(jiān)測九年級數(shù)學(xué)試題(無答案)
- 2024新信息科技七年級《第一單元 探尋互聯(lián)網(wǎng)新世界》大單元整體教學(xué)設(shè)計2022課標
- 成語積累競賽試題
- 2024焊接工藝規(guī)程
- 2024年巴黎奧運會
- 人教版(2024)七年級全一冊體育與健康第6課《識別界限 拒絕性騷擾》教學(xué)設(shè)計
- 第六單元(整體教學(xué)設(shè)計)九年級語文上冊大單元教學(xué)名師備課系列(統(tǒng)編版)
- DB1331T 080-2024 雄安新區(qū)零碳建筑技術(shù)標準
- 河北省衡水市棗強縣2024-2025學(xué)年九年級上學(xué)期10月月考物理試題
- 時代樂章-第2課 科技之光(課件)2024-2025學(xué)年人教版(2024)初中美術(shù)七年級上冊 -
評論
0/150
提交評論