C++實踐參考——立體類族共有的抽象類
阿新 • • 發佈:2019-01-30
【專案-立體類族共有的抽象類】
設計一個抽象類CSolid,含有用於求表面積及體積的兩個純虛擬函式。設計派生類CCube、CBall、CCylinder,分別表示正方體、球體及圓柱體。在main()函式中,定義CSolid *p;(p是指向基類的指標,且這個基類是個抽象類)。要求利用這個p指標,能夠求出正方體、球體及圓柱體物件的表面積及體積。
設計一個抽象類CSolid,含有用於求表面積及體積的兩個純虛擬函式。設計派生類CCube、CBall、CCylinder,分別表示正方體、球體及圓柱體。在main()函式中,定義CSolid *p;(p是指向基類的指標,且這個基類是個抽象類)。要求利用這個p指標,能夠求出正方體、球體及圓柱體物件的表面積及體積。
[參考解答]
#include "iostream" using namespace std; const double pai=3.1415926; // 抽象立體圖形基類 class CSolid { public: virtual double SurfaceArea() const=0; virtual double Volume() const=0; }; // 立方體類 class CCube : public CSolid { public: CCube(double len=0); double SurfaceArea() const; // 求表面積 double Volume() const; // 求體積 private: double length; }; // 立方體類建構函式 CCube::CCube(double len) { length=len; } // 求立方體表面積 double CCube::SurfaceArea() const { double c; c=6*length*length; return c; } // 求立方體體積 double CCube::Volume() const { double c; c=length*length*length; return c; } // 球體類 class CBall : public CSolid { private: double radius; // 圓周率 public: CBall(double r=0); double SurfaceArea() const; // 求表面積 double Volume() const; // 求體積; }; // 球體類建構函式 CBall::CBall(double r) { radius=r; } // 求球體表面積 double CBall::SurfaceArea() const { double c; c=4*pai*radius*radius; return c; } // 求球體體積 double CBall::Volume() const { double c; c=pai*radius*radius*radius*4/3; return c; } // 圓柱體類 class CCylinder : public CSolid { private: double radius; double height; public: CCylinder(double r=0,double high=0); double SurfaceArea() const; // 求表面積 double Volume() const; // 求體積 }; // 圓柱體類建構函式 CCylinder::CCylinder(double r,double high) { radius=r; height=high; } // 求圓柱體表面積 double CCylinder::SurfaceArea() const { double c; c=2*pai*radius*radius+2*pai*radius*height; return c; } // 求圓柱體體積 double CCylinder::Volume() const { double c; c=pai*radius*radius*height; return c; } int main( ) { CSolid *p; double s,v; CCube x(30); cout<<"立方體邊長為 30 "<<endl; p=&x; s=p->SurfaceArea( ); v=p->Volume( ); cout<<"表面積:"<<s<<endl; cout<<"體積:"<<v<<endl; cout<<endl; CBall y(4.5); cout<<"球體半徑為 4.5 "<<endl; p=&y; s=p->SurfaceArea( ); v=p->Volume( ); cout<<"表面積:"<<s<<endl; cout<<"體積:"<<v<<endl; cout<<endl; CCylinder z(10,20); cout<<"圓柱體底面半徑、高分別為 10, 20"<<endl; p=&z; s=p->SurfaceArea( ); v=p->Volume( ); cout<<"表面積:"<<s<<endl; cout<<"體積:"<<v<<endl; cout<<endl; return 0; }