C++實(shí)驗(yàn)報(bào)告(虛基類)分析_第1頁
C++實(shí)驗(yàn)報(bào)告(虛基類)分析_第2頁
C++實(shí)驗(yàn)報(bào)告(虛基類)分析_第3頁
C++實(shí)驗(yàn)報(bào)告(虛基類)分析_第4頁
C++實(shí)驗(yàn)報(bào)告(虛基類)分析_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、實(shí)驗(yàn)五 Shape虛基類一、實(shí)驗(yàn)?zāi)康?.掌握虛基類的定義、使用2.理解使用虛函數(shù)和繼承類實(shí)現(xiàn)多態(tài)性二、實(shí)驗(yàn)環(huán)境Windows + VC+6.0。三、實(shí)驗(yàn)內(nèi)容及要求定義抽象基類Shape,有它派生出三個(gè)類:Circle、Rectangle、Triangle,用函數(shù)ShowArea分別顯示各種圖形的面積,最后還要顯示所有的圖形面積。要求用基類指針數(shù)組,使他的每一個(gè)元素指向一個(gè)派生類對象。四、實(shí)驗(yàn)步驟(1) 定義一個(gè)虛基類Shape,在ShowArea函數(shù)聲明前冠以virtual使其成為虛函數(shù),并且能夠在派生類中重定義。/形狀類 Shapeclass Shape public: virtual do

2、uble ShowArea()const=0; ;(2)定義三個(gè)派生類Circle、Rectangle、Triangle,并公有繼承Shape基類。/圓形 Circleclass Circle:public Shape private: double radius;/半徑 public: Circle(double r):radius(r) /構(gòu)造函數(shù) double ShowArea() const /求圓形面積的函數(shù) return PI*radius*radius; ;/矩形類 Rectangleclass Rectangle:public Shape private: double hei

3、gth;/高 double width;/寬public: Rectangle(double h,double w):heigth(h),width(w)/構(gòu)造函數(shù) double ShowArea()const /求矩形面積的函數(shù) return heigth*width; ;/三角形類 Triangleclass Triangle:public Shape private: double a,b,c;/三角形三條邊 public: Triangle(double x,double y,double z):a(x),b(y),c(z)/構(gòu)造函數(shù) double ShowArea()const /求

4、三角形面積函數(shù) int p=(a+b+c)/2;return sqrt(p*(p-a)*(p-b)*(p-c); (3)在主函數(shù)中分別調(diào)用三個(gè)派生類的ShowArea函數(shù),求出各個(gè)形狀的面積。int main() Circle A(0.5); cout圓形面積y:A.ShowArea()endl;/輸出圓形面積 coutendl;Rectangle B(3,4); cout矩形面積y:B.ShowArea()endl;/輸出矩形面積coutendl; Triangle C(5,3,4);cout三角形面積y:C.ShowArea()訪問派生類對象的成員函數(shù)ShowArea,如p0-ShowAr

5、ea()訪問的是對象A的成員函數(shù)。double area=0.0; Shape *p3=&A,&B,&C;/基類指針數(shù)組 for(int i=0;iShowArea();/面積相加 cout總面積y:areaShowArea();/訪問派生類重寫ShowArea函數(shù)的入口地址六、實(shí)驗(yàn)結(jié)果與總結(jié)實(shí)驗(yàn)總結(jié):抽象基類與普通基類不同,他平不是現(xiàn)實(shí)存在的對象,它可以沒有任何物理上的或其他實(shí)際意義方面的含義,例如Shape類,只有一個(gè)成員函數(shù),沒有數(shù)據(jù)成員。它既不代表點(diǎn),也不代表圓。實(shí)驗(yàn)結(jié)果如下:實(shí)驗(yàn)總結(jié):1. 抽象基類與普通基類不同,他平不是現(xiàn)實(shí)存在的對象,它可以沒有任何物理上的或其他實(shí)際意義方面的含義

6、,例如Shape類,只有一個(gè)成員函數(shù),沒有數(shù)據(jù)成員。它既不代表點(diǎn),也不代表圓。對于虛函數(shù),在基類用Virtual申明成員函數(shù)為虛函數(shù)。這樣就可以在派生類中重新定義此函數(shù),為他賦新功能,并能方便的調(diào)用。2. 抽象基類是本類族的公共接口?;蛘哒f,從同一基類派生出的多個(gè)類有同一接口。因此能響應(yīng)同一形式的消息(例如各類對象都有能對用基類指針調(diào)用虛函數(shù)作出響應(yīng)),但是相應(yīng)的方式因?qū)ο蟛煌?。在通過虛函數(shù)實(shí)現(xiàn)動(dòng)態(tài)多動(dòng)性時(shí),可以不必考慮對象是哪一個(gè)類派生出來的,都用同一種方式調(diào)用(因?yàn)榛愔羔樋梢灾赶蛲活惤M的所有類,因而可通過基類指針調(diào)用不同類的虛函數(shù))。附1:完整的原程序#include #inclu

7、deusing namespace std; const double PI=3.1415926; /形狀類Shapeclass Shape public: virtual double ShowArea()const=0; ; /圓形類 Circleclass Circle:public Shape private: double radius;/半徑 public: Circle(double r):radius(r) /構(gòu)造函數(shù) double ShowArea() const /求圓形面積函數(shù) return PI*radius*radius; ; /矩形類 Rectangleclass

8、Rectangle:public Shape private: double heigth;/高 double width;/寬 public: Rectangle(double h,double w):heigth(h),width(w)/構(gòu)造函數(shù) double ShowArea()const /求矩形面積函數(shù) return heigth*width; ; /三角形類Triangleclass Triangle:public Shape private: double a,b,c;/三角形三條邊 public: Triangle(double x,double y,double z):a(x),b(y),c(z)/構(gòu)造函數(shù) double ShowArea()const /求三角形面積函數(shù) int p=(a+b+c)/2;return sqrt(p*(p-a)*(p-b)*(p-c); ; int main() Circle A(0.5); cout圓2形?面?積y:A.ShowArea()endl;/輸出圓形面積 coutendl;Rectangle B(3,4); cout矩形面積y:B.ShowArea()endl;/輸出矩形面積coutendl; Triangle C(5,3,4);cout三角

溫馨提示

  • 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

提交評論