#include<iostream>
using namespace std;
// 基类:Container
class Container{
protected:
double radius; // 半径
double height; // 高度
public:
// 构造函数
Container(double ra)
{
Container::radius=ra;
}
// 返回半径
double print_ra()
{
return radius;
}
// 返回高度
double print_he()
{
return height;
}
// 纯虚函数:表面积
virtual double surface_area()=0;
// 纯虚函数:体积
virtual double volume()=0;
};
// 派生类:Sphere(球体)
class Sphere:public Container{
public:
// 构造函数
Sphere(double ra):Container(ra)
{}
// 计算表面积
double surface_area()
{
return 4*3.14*radius*radius;
}
// 计算体积
double volume()
{
return 3.14*radius*radius*radius*4/3;
}
};
// 派生类:Cylinder(圆柱体)
class Cylinder:public Container{
public:
// 构造函数
Cylinder(double ra,double he):Container(ra)
{
height=he;
}
// 计算表面积
double surface_area()
{
return 2*3.14*radius*(height+radius);
}
// 计算体积
double volume()
{
return 3.14*radius*radius*height;
}
};
// 派生类:Cube(立方体)
class Cube:public Container{
public:
// 构造函数
Cube(double ra):Container(ra){};
// 计算表面积
double surface_area()
{
return radius*radius*6;
}
// 计算体积
double volume()
{
return radius*radius*radius;
}
};
// 主函数
int main()
{
Container*ptr;
Sphere obj1(8);
Cylinder obj2(3,5);
Cube obj3(5);
ptr=&obj1;
cout<<"球体半径:"<<ptr->print_ra()<<endl;
cout<<"球体表面积:"<<ptr->surface_area()<<endl;
cout<<"球体体积:"<<ptr->volume()<<endl;
ptr=&obj2;
cout<<"圆柱体半径:"<<ptr->print_ra()<<endl;
cout<<"圆柱体高:"<<ptr->print_he()<<endl;
cout<<"圆柱体表面积:"<<ptr->surface_area()<<endl;
cout<<"圆柱体体积:"<<ptr->volume()<<endl;
ptr=&obj3;
cout<<"正方体边长:"<<ptr->print_ra()<<endl;
cout<<"正方体表面积:"<<ptr->surface_area()<<endl;
cout<<"正方体体积:"<<ptr->volume()<<endl;
return 0;
}