#include <iostream>
using namespace std;
class CSolid
{
public:
virtual double area()const;//表面积
virtual double volume()const;//体积
};
class CCube:public CSolid{
public:
CCube(double a){A=a;}
double area()const{return A*A*6; }
double volume()const{return A*A*A;}
private:
double A;
};
class CBall:public CSolid{
public:
CBall(double r){R=r;}
double area()const{return 4*3.141593*R*R; }
double volume()const{return 3.141593*1.333*R*R*R;}
private:
double R;
};
class CCylinder:public CSolid{
public:
CCylinder(double r,double h){R=r;H=h;}
double area()const{return 3.141593*R*R*2+2*3.141593*R*H; }
double volume()const{return 3.141593*R*R*H;}
private:
double R,H;
};
int main( )
{
CSolid *p;
double s,v;
CCube x(30);
cout<<"立方体边长为 30 "<<endl;
p=&x;
s=p->area( );
v=p->volume( );
cout<<"表面积:"<<s<<endl;
cout<<"体积:"<<v<<endl;
cout<<endl;
CBall y(4.5);
cout<<"球体半径为 4.5 "<<endl;
p=&y;
s=p->area( );
v=p->volume( );
cout<<"表面积:"<<s<<endl;
cout<<"体积:"<<v<<endl;
cout<<endl;
CCylinder z(10,20);
cout<<"圆柱体底面半径、高分别为 10, 20"<<endl;
p=&z;
s=p->area( );
v=p->volume( );
cout<<"表面积:"<<s<<endl;
cout<<"体积:"<<v<<endl;
cout<<endl;
return 0;
}