设计一个抽象类CSolid,含有两个求表面积及体积的纯虚函数。设计个派生类CCube、CBall、CCylinder,分别表示正方体、球体及圆柱体。在main()函数中,定义基类的指针p(CSolid *p;),利用p指针,输出正方体、球体及圆柱体对象的表面积及体积。
#include<iostream>
using namespace std;
class CSolid
{
//private:
protected:
double radius;
public:
CSolid(double r):radius(r){}
virtual void SuperficialArea()const=0;
virtual void Volume()const=0;
};
class CCube:public CSolid
{
public:
CCube(double r):CSolid(r){}
void SuperficialArea()const{cout<<"正方体表面积:"<<6*radius*radius<<endl;}
void Volume()const{cout<<"正方体体积:"<<radius*radius*radius<<endl;}
};
class CBall:public CSolid
{
public:
CBall(double r):CSolid(r){}
void SuperficialArea()const{cout<<"球体表面积:"<<4*3.14*radius*radius<<endl;}
void Volume()const{cout<<"球体体积:"<<4*3.14*radius*radius*radius/3<<endl;}
};
class CCylinder:public CSolid
{
private:
double height;
public:
CCylinder(double r,double h):CSolid(r),height(h){}
void SuperficialArea()const{cout<<"圆柱体表面积:"<<2*3.14*radius*height<<endl;}
void Volume()const{cout<<"圆柱体体积:"<<3.14*radius*radius*height<<endl;}
};
int main()
{
CCube cc(5);
CBall cb(5);
CCylinder cc2(5,2);
cc.SuperficialArea();
cc.Volume();
cb.SuperficialArea();
cb.Volume();
cc2.SuperficialArea();
cc2.Volume();
return 0;
}