#include <iostream>
using namespace std;
class CSolid
{
public:
virtual double Surarea()const=0;
virtual double volume()const=0;
};
class CCube: public CSolid
{
public:
virtual double volume()const
{
return length*length*length;
};
virtual double Surarea() const
{
return length*length*6;
};
CCube(double len):length(len){};
private:
double length;
};
class CBall :public CSolid
{
private:
double radius;
public:
virtual double volume()const
{
return radius*radius*4;
};
virtual double Surarea()const
{
return 3.14*radius*radius*radius*4/3;
};
CBall(double r):radius(r){};
};
class CCylinder:public CSolid
{
public:
virtual double volume()const
{
return 3.14*radius*radius*1/2*heigh;
};
virtual double Surarea()const
{
return (3.14*radius*radius+6.28*radius*heigh);
};
CCylinder(double r,double h):radius(r),heigh(h){};
private:
double radius,heigh;
};
int main( )
{
CSolid *p;
double s,v;
CCube x(5);
p=&x;
s=p->Surarea( );
v=p->volume( );
cout<<"立方体表面积:"<<s<<endl;
cout<<"立方体体积:"<<v<<endl;
cout<<endl;
CBall y(5);
p=&y;
s=p->Surarea( );
v=p->volume( );
cout<<"球体表面积:"<<s<<endl;
cout<<"球体体积:"<<v<<endl;
cout<<endl;
CCylinder z(5,5);
p=&z;
s=p->Surarea( );
v=p->volume( );
cout<<"圆柱体表面积:"<<s<<endl;
cout<<"圆柱体体积:"<<v<<endl;
cout<<endl;
return 0;
}