C++实验八
實驗八 ?多態實現
【實驗目的】
1、 了解繼承和多態的作用和實現方式,掌握動態聯編方法;
2、 掌握使用C++語言的抽象類和派生類實現繼承性;
【實驗內容】
1、 設計一個立體圖形類(CStereoShape類),并滿足如下要求:
?CStereoShape類有一個純虛函數GetArea,能夠獲取立方體的表面積;
?CStereoShape類有一個純虛函數GetVolume,能夠獲取立方體的體積;
2、 設計一個立方體類(CCube類),該類繼承于CStereoShape類,并滿足如下要求:
?CCube類有一個帶參數的構造函數,其參數分別對應于立方體的長、寬、高。
?用一個成員函數來實現對立方體長、寬、高的設置。
?重載CStereoShape類的GetArea和GetVolume,分別完成立方體的表面積和體積的計算。
3、 設計一個球體類(CSphere),該類繼承于CStereoShape類,并滿足如下要求:
?CSphere類有一個帶參數的構造函數,其參數對應于球體的半徑。
?用一個成員函數來實現對球體半徑的設置。
?重載CStereoShape類的GetArea和GetVolume,分別完成球體的表面積和體積的計算。
4、 實現一個main函數,在main函數中至少完成如下工作:
?實例化一個CCube類的對象a_cube和CSphere類的對象c_sphere;
?定義一個CStereoShape類的指針p;
?將a_cube的長、寬和高分別設置為4、5和6;將p指向a_cube,通過p將a_cube的表面積和體積打印到屏幕上;
?將c_sphere的半徑設置為7;將p指向c_sphere,通過p將c_sphere的表面積和體積打印到屏幕上。
【實驗要求】
1、編寫實驗內容要求的程序、編譯并調試通過;
2、實驗報告中記錄編程過程中出現的錯誤與改正方法;
3、總結靜態聯編和動態聯編的區別;
4、總結抽象類的特點及作用;
1 #include<iostream> 2 using namespace std; 3 const double PI=3.1415926; 4 class CStereoShape 5 {public: 6 virtual double GetArea()=0; 7 virtual double GetVolume()=0; 8 }; 9 class CCube:public CStereoShape 10 {public: 11 CCube(double len,double wid,double hei){ length=len;width=wid;height=hei;} 12 void Set(double len,double wid,double hei){ length=len;width=wid;height=hei;} 13 double GetArea(){return 2*(length*width+length*height+width*height);} 14 double GetVolume(){return length*width*height;} 15 private: 16 double length,width,height; 17 }; 18 class CSphere:public CStereoShape 19 {public: 20 CSphere(double rad=0){ radius=rad;} 21 void Set(double rad){ radius=rad;} 22 double GetArea(){return 4*PI*radius*radius;} 23 double GetVolume(){return 4/3.0*PI*radius*radius*radius;} 24 private: 25 double radius; 26 }; 27 int main(){ 28 CStereoShape *p; 29 CCube a_cube(0,0,0); 30 CSphere c_sphere(0); 31 a_cube.Set(4,5,6); 32 p=&a_cube; 33 cout<<"立方體的表面積:"<<p->GetArea()<<" 立方體的體積:"<<p->GetVolume()<<endl; 34 c_sphere.Set(7); 35 p=&c_sphere; 36 cout<<"球體的表面積:"<<p->GetArea()<<" 球體的體積:"<<p->GetVolume()<<endl; 37 return 0; 38 }【錯誤及改正方法】:一,開始沒有搞懂構造函數和成員函數設置參數的區別,后來知道了構造函數是在創建對象的時候對對象的數據成員進行初始化的,而成員函數設置是在數據成員初始化之后對其進行修改的。二,創建了有參數的構造函數,在主函數中創建對象的時候要有相應的實參值。 【實驗分析】:靜態聯編和動態聯編的區別:靜態聯編又稱功能早綁定,動態聯編又稱為功能晚綁定。綁定就是把函數體與函數調用相聯系,當綁定在程序編譯階段完成時就成為功能早綁定,綁定在程序運行階段完成為功能晚綁定。動態聯編的基礎是虛函數,體現了程序設計的多態性。如果一個類至少有一個純虛函數,該類就是抽象類。特點:抽象類只能作為其他類的基類來使用,不能建立抽象類對象,這只能用來為派生類提供一個接口規范,其純虛函數的實現由派生類給出。不允許從具體類派生出派生類。抽象類不能用作參數類型,函數返回類型或顯式轉換的類型。如果派生類給出了基類所有純虛函數的實現則不再為抽象類。抽象類可以定義普通成員函數和虛函數。
轉載于:https://www.cnblogs.com/poppybloom/p/3472204.html
總結
- 上一篇: MQ通道配置
- 下一篇: Can't connect to MyS