項目要求
設計一個抽象類CSolid,含有用於求表面積及體積的兩個純虛函數。設計派生類CCube、CBall、CCylinder,分別表示正方體、球體及圓柱體。在main()函數中,定義CSolid *p;(p是指向基類的指針,且這個基類是個抽象類)。要求利用這個p指針,能夠求出正方體、球體及圓柱體對象的表面積及體積。
代碼如下
#include <iostream>
using namespace std;
class CSolid
{
public:
virtual double area()=0;
virtual double volume()=0;
};
class CCube:public CSolid
{
private:
double length;
public:
CCube(double l):length(l) {}
double volume()
{
return length*length*length;
}
double area()
{
return length*length*6;
}
};
class CBall:public CSolid
{
private:
double radium;
public:
CBall(double r):radium(r) {}
double volume()
{
return radium*radium*radium*3.14*4.0/3;
}
double area()
{
return radium*radium*3.14*4;
}
};
class CCylinder:public CSolid
{
private:
double radium;
double height;
public:
CCylinder(double r,double h):radium(r),height(h) {}
double volume()
{
return radium*radium*3.14*height;
}
double area()
{
return (radium*radium*3.14*2+radium*3.14*2*height);
}
};
int main()
{
CCube ccu(5);
CBall cb(4.5);
CCylinder ccy(2,6.5);
CSolid *p;
p=&ccu;
cout<<"邊長爲5的正方體:"<<endl<<"體積:"<<p->volume()<<"\n面積:"<<p->area();
p=&cb;
cout<<"\n\n半徑爲4.5的球體:"<<endl<<"體積:"<<p->volume()<<"\n面積:"<<p->area();
p=&ccy;
cout<<"\n\n底面半徑爲2,高爲6.5的圓柱體:"<<endl<<"體積:"<<p->volume()<<"\n面積:"<<p->area();
return 0;
}
運行結果
學習心得
main函數中也可以修改爲:
int main()
{
CCube ccu(5);
CBall cb(4.5);
CCylinder ccy(2,6.5);
CSolid *p[3]={&ccu,&cb,&ccy};
cout<<"邊長爲5的正方體:"<<endl<<"體積:"<<p[0]->volume()<<"\n面積:"<<p[0]->area();
cout<<"\n\n半徑爲4.5的球體:"<<endl<<"體積:"<<p[1]->volume()<<"\n面積:"<<p[1]->area();
cout<<"\n\n底面半徑爲2,高爲6.5的圓柱體:"<<endl<<"體積:"<<p[2]->volume()<<"\n面積:"<<p[2]->area();
return 0;
}