![c派生類與繼承試驗(yàn)報(bào)告_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/5/840feea4-f9ea-45c8-92c7-ada57e73131e/840feea4-f9ea-45c8-92c7-ada57e73131e1.gif)
![c派生類與繼承試驗(yàn)報(bào)告_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/5/840feea4-f9ea-45c8-92c7-ada57e73131e/840feea4-f9ea-45c8-92c7-ada57e73131e2.gif)
![c派生類與繼承試驗(yàn)報(bào)告_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/5/840feea4-f9ea-45c8-92c7-ada57e73131e/840feea4-f9ea-45c8-92c7-ada57e73131e3.gif)
![c派生類與繼承試驗(yàn)報(bào)告_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/5/840feea4-f9ea-45c8-92c7-ada57e73131e/840feea4-f9ea-45c8-92c7-ada57e73131e4.gif)
![c派生類與繼承試驗(yàn)報(bào)告_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/5/840feea4-f9ea-45c8-92c7-ada57e73131e/840feea4-f9ea-45c8-92c7-ada57e73131e5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、實(shí)驗(yàn)2派生類與繼承實(shí)驗(yàn)課程名:面向?qū)ο蟪绦蛟O(shè)計(jì)(C+)專業(yè)班級:學(xué)號:姓名:實(shí)驗(yàn)時間:實(shí)驗(yàn)地點(diǎn):指導(dǎo)教師:2.1實(shí)驗(yàn)?zāi)康暮鸵?1)掌握派生類的聲明方法和派生類構(gòu)造函數(shù)的定義方法。(2)掌握不同繼承方式下,基類成員在派生類中的訪問屬性。(3)掌握在繼承方式下,構(gòu)造函數(shù)與析構(gòu)函數(shù)的執(zhí)行順序與構(gòu)造規(guī)則。(4)學(xué)習(xí)虛基類在解決二義性問題中的作用。二、實(shí)驗(yàn)內(nèi)容一、構(gòu)造一個類Geometry及其派生類,該類主要實(shí)現(xiàn)關(guān)于幾何圖形的基本操作。對于基類“幾何圖形”,有求面積、求體積的函數(shù)(純虛函數(shù)),其派生類圓和矩形主要有初始化(構(gòu)造函數(shù)),求面積,求周長操作,類圓的派生類圓球和圓柱有求表面積、體積 操作。試
2、在主函數(shù)中分別定義圓、圓球、圓柱以及矩形的對象,并調(diào)用其成員函數(shù)實(shí) 現(xiàn)其相應(yīng)操作。實(shí)驗(yàn)代碼如下:#include<iostream>using namespace std;class Geometrypublic:Geometry()Geometry()double GetArea()/求面積函數(shù)double GetPerimeter()/ 求體積函數(shù) double Getcolume()/求周長函數(shù)virtual show();class Circlepublic Geometrypublic:Circle(double i) radiums=i;Circle()double G
3、etArea();double Getcolume();double R()return radiums;show();private:double radiums;;double Circle:GetArea()double S;S=3.14*radiums*radiums;return S;double Circle:Getcolume()double L;L=2*3.14*radiums;return L;Circle:show()cout<<" 圓的面積為:"<<GetArea()<<''<<"
4、;周長為:"<<Getcolume()<<endl;class Rectangle:public Geometrypublic:Rectangle(double i,double j)length=i;wide=j;Rectangle()double GetArea();double Getcolume();double L()return length;show();private:double length;double wide;double Rectangle:GetArea()double S;S=length*wide;return S;doubl
5、e Rectangle:Getcolume()double L;L=2*(length+wide);return L;Rectangle:show()cout<<"矩形的面積為:"<<GetArea()<<''<<" 周長為:"<<Getcolume()<<endl;class Ballpublic Circlepublic:Ball(double i):Circle(i);Ball();double GetArea();double GetPerimeter();s
6、how();double Ball:GetArea()double S;S=4*3.14*r()*r();return S;;double Ball:GetPerimeter()double V;V=(4/3)*3.14*R()*R()*R();return V;Ball:show()表面j,doublecout<<"球的體積為:"<<GetPerimeter()<<''<< 積為:"<<GetArea()<<endl;class Columnpublic Circle,pub
7、lic Rectanglepublic:Column(doublei,doublek):Circle(i),Rectangle(j,k);Column();double GetArea();double GetPerimeter();show();double Column:GetArea()return(2*3.14*R()*R()+2*3.14*R()*L();double Column:GetPerimeter()return(3.14*R()*R()*L();Column:show()cout<<”圓柱的體積為:"<<GetPerimeter()<
8、;<''<<” 表 面積為:"<<GetArea()<<endl;int main()Circle circle(2.5);circle.show();Rectangle rectangle(3,4);rectangle.show();Ball ball(3.3);ball.show();Column column(1,2,3);column.show();return 0;運(yùn)行結(jié)果:、G:。-+代碼次港實(shí)靜口 e b照到2d園的回積為;W.625周長為;1G-?壬立的回邦.為;12周長為 14疝隹休糠力;2.842表面積為;
9、136.778囪柱的崔和為:6.28衷荷制為:18 .皿Press 日n. ke to cent in u.e代碼分析:1)首先定義基類 Geometry,在定義基類的派生類 Circle , Rectangle 再定義以Circle , Rectangle為基類的派生類Column ,以及以Circle為基類 的派生類Ball;2)在定義派生類時用構(gòu)造函數(shù)初始化私有成員;3)最后用類的對象來調(diào)用類函數(shù);二、設(shè)計(jì)如下類:(1)建立一個 Point類,表示平面中的一個點(diǎn);建立一個Line類,表示平面中的一條線端,內(nèi)含兩個 Point類的對象;建立 Triangle類,表示一個三角形,內(nèi)含三個 L
10、ine類 的對象構(gòu)成一個三角形。(2)設(shè)計(jì)三個類的相應(yīng)的構(gòu)造函數(shù)、復(fù)制構(gòu)造函數(shù),完成初始化和對象復(fù)制(3)設(shè)計(jì)Triangle類的成員函數(shù)完成三條邊是否能構(gòu)成三角形的檢驗(yàn)和三角形面積計(jì) 算,面積顯示。實(shí)驗(yàn)代碼:#include<iostream>#include<math.h>using namespace std;class Point/定義一個點(diǎn)的類,坐標(biāo)為(x,y) public:Point(double i,double j)x=i;y=j; double x,y;class Linepublic:Line(double x1,double y1,double
11、x2,double y2):p1(x1,y1),p2(x2,y2);double length();private:Point p1,p2;double Line:length()return(sqrt(p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y);class Trianglepublic:Triangle(double x1,double y1,double x2,double y2,double x3,double y3,double x4,double y4,double x5,double y5,double x6,double y6):
12、L1(x1,y1,x2,y2),L2(x3,y3,x4,y4),L3(x5,y5,x6,y6);int panduan();double Area();void show();private:Line L1,L2,L3;int Triangle二panduan() double a=L1.length();double b=L2.length();double c=L3.length();if(a+b>c&&b+c>a&&a+c>b)return 1;elsereturn 0;double Triangle:Area()double a=L1.
13、length();double b=L2.length();double c=L3.length();double s=(a+b+c)/2;return(sqrt(s*(s-a)*(s-b)*(s-c);void Triangle二show()if(panduan()cout<<”三角形的面積為:"<<Area()<<endl; elsecout<<"不能構(gòu)成三角形"<<endl;int main()Triangle T1(0,0,0,1,0,0,1,0,0,1,1,0);Triangle T2(1,0,
14、0,0,0,0,0,2,0,0,0,1);T1.show();T2.show();return 0;實(shí)驗(yàn)結(jié)果:111®i 0-5Press any key to coratlnue實(shí)驗(yàn)分析:1)在主函數(shù)中定義兩個三角形的類,分別由三條邊六個點(diǎn)組成,其中第一 組能組成三角形,輸出面積,第二組邊不能組成三角形輸出不能構(gòu)成 三角形;2)定義點(diǎn)類時,定義兩個浮點(diǎn)型數(shù)據(jù),用來表示點(diǎn)的坐標(biāo),定義邊類時定 義兩個頂點(diǎn),表示兩個端點(diǎn)組成線段,定義三角形類時,用三邊表示 三角形;3)三角形的面積用海倫公式求得,在三角形中定義一個判斷函數(shù),判斷三 邊能否組成三角形,當(dāng)能組成三角形時則求面積并輸出,當(dāng)不能
15、組成 三角形時,輸出不能構(gòu)成三角形;三、定義一個基類MyArray ,基類中可以存放一組整數(shù),基類中有構(gòu)造函數(shù)、析構(gòu)函數(shù)、 輸入數(shù)據(jù)和輸出數(shù)據(jù)的函數(shù)。class MyArraypublic:MyArray(int leng);MyArray;void Input();void Display(string);protected:int*alist;int length;;(1)聲明一個類SortArray繼承類MyArray,在該類中定義一個函數(shù),具有將輸入的整數(shù)從小到大進(jìn)行排序的功能。(2)聲明一個類 ReArray繼承類MyArray,在該類中定義一個函數(shù),具有將輸入的整數(shù) 進(jìn)行倒置的功能
16、。(3)聲明一個類 AverArray繼承類MyArray,在該類中定義一個函數(shù),具有求輸入的整 數(shù)平均值的功能。(4)聲明一個 NewArray 類,同時繼承了類 SortArray,ReArray 和 AverArray,使得類 NewArray的對象同時具有排序、倒置和求平均值的功能。在繼承的過程中聲明 MyArray 為虛基類,體會虛基類在解決二義性問題中的作用。實(shí)驗(yàn)代碼:#include<iostream>#include<string>using namespace std;class Myarrayprotected:int *alist;int leng
17、th;public:Myarray(int len)alist=new intlen;length=len;Myarray();void input()int i;for(i=0;i<length;i+)cout<<" 輸入數(shù)組的第"<<i+1<<" 個元素: "<<'n';cin>>alisti;int getlen()return length;void display。for(int i=0;i<length;i+) cout<<alisti<
18、<''cout<<endl;;class SortArray:virtual public Myarraypublic:SortArray(int n):Myarray(n)sort()int i,j,t;for(j=0;j<length-1;j+)for(i=0;i<length-j-1;i+)if(alisti>alisti+1)t=alisti;alisti=alisti+1;alisti+1=t;cout<<"排序后數(shù)組為:"for(i=0;i<length;i+)cout<<alis
19、ti<<'';class averarray:virtual public Myarraypublic:averarray(int n):Myarray(n)float getaver()float aver;int sum=0,i;for(i=0;i<length;i+)sum+=alisti;aver=(float)sum/length;return aver;class rearray:virtual public Myarraypublic:rearray(int n):Myarray(n)void turn()int i,t,j=length-1;f
20、or(i=0;i<length/2;i+,j-)t=alisti;alisti=alistj;alistj=t;class nawarray:public rearray,public averarray,publicSortArraypublic:nawarray(intn):Myarray(n),rearray(n),averarray(n),SortArray(n);int main()nawarray A(10);A.input();A.display();A.sort();cout<<"輸出平均值:"<<endl;cout<&l
21、t;A.getaver()<<endl;cout<<"倒置:"<<endl;A.turn();A.display();return 0;實(shí)驗(yàn)結(jié)果: 'G:c * .k ftjgsy2_3.exe"結(jié)果分析:定義一個基類,用指針作為數(shù)組名,定義一個數(shù)組,在定義 各個基類,分別實(shí)現(xiàn)求平均值,排序,倒置的功能。在調(diào)用成員時由于各個派生類都有基類的成員input ,output ,故用虛基類,避免出現(xiàn)二異性。四、隊(duì)列具有先進(jìn)先出的特點(diǎn),所有新來的元素都放在隊(duì)列尾部,出隊(duì)列的元素從隊(duì)列 頭部出去。棧具有后進(jìn)先出的特點(diǎn),所有入棧的元
22、素都放在棧頂,出棧時棧頂元素先出。這兩種結(jié)構(gòu)具有很多相似的地方:都存放了一系列的元素,元素的操作都在兩頭進(jìn)行, 元素個數(shù)都是動態(tài)可變的。我們可以設(shè)計(jì)一個基類,完成它們共同的功能,然后分別派 生出隊(duì)列類和棧類。這樣可以減少代碼,提高效率。設(shè)計(jì)的基類也可以用于派生出其他 類。本實(shí)驗(yàn)要求設(shè)計(jì)這個基類以及它的兩個派生類。設(shè)計(jì)基類LinkList ,用鏈表結(jié)構(gòu)實(shí)現(xiàn)。要求鏈表類具有以下功能:?能夠在鏈表的頭尾增加節(jié)點(diǎn)以及在鏈表尾增加節(jié)點(diǎn)?能夠記錄鏈表的個數(shù)(用靜態(tài)成員)?能返回鏈表中的節(jié)點(diǎn)個數(shù)?能查看鏈表頭節(jié)點(diǎn)的元素值?能告知鏈表是否為空?在鏈表類的構(gòu)造函數(shù)中初始化鏈表?在鏈表類的析構(gòu)函數(shù)中釋放鏈表所有元
23、素的空間下面給出鏈表類的類定義,你需要根據(jù)該定義完全實(shí)現(xiàn)該類。用鏈表實(shí)現(xiàn)的列表類class LinkList 定義鏈表節(jié)點(diǎn)類型typedef struct nodeint data;struct node *next; ListDataNode;定義鏈表類型typedef ListDataNode * ListData;protected:int count; /列表中元素的個數(shù)ListData dataLinkHead, dataLinkTail;/ 表頭、表尾指針static ListCount; / 列表個數(shù)public:LinkList(void); / 構(gòu)造函數(shù)virtual Lin
24、kList(void); / 析構(gòu)函數(shù)void putTail (int newData); /在表尾加入一個新元素void putHead (int newData); /在表頭插入一個新元素int getHead (void); /從表頭取出一個元素int peekHead(void); 查看表頭元素的值,假定列表至少有一個元素bool empty ( ); /檢查列表是否空int getElemCount(); 取列表元素個數(shù)static int getListNumber(); 取列表個數(shù);(1)在上面實(shí)現(xiàn)的鏈表類的基礎(chǔ)上派生隊(duì)列類和棧類,要求隊(duì)列類可以進(jìn)行元素入隊(duì) 列和出隊(duì)列操作以及
25、取隊(duì)列長度操作,棧類可以進(jìn)行入棧和出棧操作,還可以查看棧頂 元素的值。(2)在隊(duì)列類中實(shí)現(xiàn)一個輸出隊(duì)列內(nèi)容的函數(shù)printQueue ,輸出格式為:Queue head->0 : 1 : 2 : 3其中,0、1、2、3為隊(duì)列中的元素,0是隊(duì)頭。在棧類中實(shí)現(xiàn)一個輸出棧中內(nèi)容的函數(shù)printstack ,輸出格式為:Stack member:I 3 | 2 | 1 | 0 |其中,3、2、1、0是棧中元素,3為棧頂元素。(3)用多文件結(jié)構(gòu)實(shí)現(xiàn)程序。三個類的定義放在一個頭文件中,類的實(shí)現(xiàn)放在另一個源文件中。主程序用于測試你所設(shè)計(jì)的三個類的正確性。測試內(nèi)容包括:?在隊(duì)列中加入幾個元素,用 pri
26、ntQueue()打印隊(duì)列內(nèi)容,然后再從隊(duì)列中取出這些 元素,看是否正確?在棧中加入幾個元素,用printStack()打印棧的內(nèi)容,然后再從棧中取出這些元素,看是否正確?測試取隊(duì)列長度的函數(shù) getQueueLength()的正確性?測試判斷棧是否為空的函數(shù) empty()的正確性實(shí)驗(yàn)代碼:#include<iostream>using namespace std;struct Nodeint data;Node *next;class LinkListpublic:LinkList(int a,int n);/構(gòu)造函數(shù)LinkList()head=newNode;tail=ne
27、wNode;head->next=NULL;tail->next=NULL;LinkList(); 析構(gòu)函數(shù)int Length(); 求鏈表長度的函數(shù)int puthead();在頭部插入元素的函數(shù)int puttail();在尾部插入元素的函數(shù)void emoty();/檢查鏈表是否為空的函數(shù)int gethead (); /從表頭取出一個元素Node *head,*tail;int length;LinkList:LinkList(int a,int n)int i;Node *p,*q;head=new Node;head->data=a0;p=new Node;p-
28、>data=a1;head->next=p;for(i=2;i<n;i+)q=new Node; q->data=ai; p->next=q;p=q;tail=p;tail->next=NULL;LinkList:LinkList()Node *p,*q;p=head;while(p)q=p; p=p->next;delete q;int LinkList:Length()Node *p;int i=0;p=head;while(p)p=p->next;i+;return i;int LinkList:puthead()Node *p;p=new
29、 Node;cout<<"請輸入要插入的元素:"<<endl;cin>>p->data;p->next=head;head=p;return 0;int LinkList:puttail()Node *p;p=new Node;cout<<"請輸入要插入的元素:"<<endl;cin>>p->data;tail->next=p;tail=p;tail->next=NULL;return 0;void LinkList:emoty()if(!head-&g
30、t;next)cout<<"鏈表為空"<<endl;elsecout<<”鏈表不為空"<<endl;int LinkList:gethead ()Node *p;p=head;head=head->next;return p->data;delete p;class Queuepublic LinkListpublic:Queue(int a,int n):LinkList(a,n);void inqueue();/入隊(duì)函數(shù)void outqueue(); 出隊(duì)函數(shù);void Queue:inqueue()LinkList:puttail();void Queue:outqueue()cout<<"Queue head->"while(head!=NULL)cout<<LinkList:gethead()<<':'cout<<endl;class Stackpublic LinkListpublic:Stack():LinkList()int i=0;for(i=0;i<10;i+)LinkList:puthead();void ins
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 自助燒烤活動方案
- 建筑工程咨詢服務(wù)合同協(xié)議書
- 外幣資金借貸合同
- 高效解決方案與實(shí)踐指南
- 北京市房屋出租委托代理協(xié)議書范本
- 商業(yè)房房屋出租合同范本
- 私人財(cái)產(chǎn)抵押連帶責(zé)任保證借款合同范本
- 餐飲公司轉(zhuǎn)讓協(xié)議書范本
- 工程項(xiàng)目采購合同范本
- 房屋租賃的協(xié)議書范本
- 2024年安徽省高校分類對口招生考試數(shù)學(xué)試卷真題
- ISO45001管理體系培訓(xùn)課件
- 動畫課件教學(xué)教學(xué)課件
- 小學(xué)生心理健康講座5
- 綿陽市高中2022級(2025屆)高三第一次診斷性考試(一診)數(shù)學(xué)試卷(含答案逐題解析)
- 貴州省房屋建筑和市政工程標(biāo)準(zhǔn)監(jiān)理電子招標(biāo)文件(2023年版)
- 高級職業(yè)培訓(xùn)師(三級)職業(yè)資格鑒定考試題及答案
- 小學(xué)英語800詞分類(默寫用)
- 真實(shí)世界研究指南 2018
- JBT 7946.3-2017 鑄造鋁合金金相 第3部分:鑄造鋁合金針孔
- 2024年燃?xì)廨啓C(jī)值班員技能鑒定理論知識考試題庫-上(單選題)
評論
0/150
提交評論