定义抽象类Container,由它派生出3个派生类:Sphere(球体)、Cylinder(圆柱体)、Cube(正方体),用虚函数分别计算几种图形的表面积和体积。
const double PI=3.1415926;
class Container
{
public:
virtual double surface_area()=0; //纯虚函数surface_area,计算图形的表面积
virtual double volume()=0; //纯虚函数volume,计算图形的体积
};
生成上述类并编写主函数,根据输入的图形信息,计算图形的表面积和体积并输出。
输入格式:
第一行输入图形的个数N,接下来N行每一行给出一个多边形的基本信息,每行的第一个数字为当前图形的类型,1为球体,后面是球体的半径;2为圆柱体,后面跟随两个数字,分别为圆柱体的底面半径和高;3为正方体,后面的数字为正方体的边长。
输出格式:
相应的表面积及体积
输入样例:
在这里给出一组输入。例如:
3
1 2
2 2 5
3 5
输出样例:
在这里给出相应的输出。例如:
球体表面积:50.2655,球体体积:33.5103
圆柱体表面积:87.9646,圆柱体体积:62.8319
正方体表面积:150,正方体体积:125
作者: hebut_吕华
单位: 河北工业大学
时间限制: 400 ms
内存限制: 64 MB
#include<iostream>
using namespace std;
const double PI = 3.1415926;
class Container
{
public:
virtual double surface_area() = 0; //纯虚函数surface_area,计算图形的表面积
virtual double volume() = 0; //纯虚函数volume,计算图形的体积
};
class Sphere:public Container {
private:
double r;
public:
Sphere(double x) {
r = x;
}
virtual double surface_area() {
double S;
S = 4 * PI * r * r;
return S;
}
virtual double volume() {
double V;
V =( 4 * PI * r * r * r)/3;
return V;
}
};
class Cylinder :public Container {
private:
double h;
double r;
public:
Cylinder(double x, double y) {
r = x;
h = y;
}
virtual double surface_area() {
double S;
S = 2 * PI * r * r + 2 * PI * r * h;
return S;
}
virtual double volume() {
double S;
S = PI * r * r * h;
return S;
}
};
class Cube :public Container {
private:
double c;
public:
Cube(double x) {
c = x;
}
virtual double surface_area() {
double S;
S = 6 * c * c;
return S;
}
virtual double volume() {
double V;
V = c * c * c;
return V;
}
};
int main() {
int n,i=0;
cin >> n;
int ch;
Container* q;
while (i<n) {
cin >> ch;
if (ch == 1) {
double r;
cin >> r;
Sphere p(r);
q = &p;
cout << "球体表面积:" << q->surface_area() << ",球体体积:" << q->volume()<<endl;
}
if (ch == 2) {
double r, h;
cin >> r >> h;
Cylinder p(r, h);
q = &p;
cout << "圆柱体表面积:" << q->surface_area() << ",圆柱体体积:" << q->volume()<<endl;
}
if (ch == 3) {
double c;
cin >> c;
Cube p(c);
q = &p;
cout << "正方体表面积:" << q->surface_area() << ",正方体体积:" << q->volume()<<endl;
}
i++;
}
return 0;
}