定义抽象类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
#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:
void set(double rr) {
r = rr;
}
double surface_area() override {
return 4 * PI * r * r;
}
double volume() override {
return 4 * PI * r * r * r / 3;
}
};
class Cylinder : public Container {
private:
double r, h;
public:
void set(double rr, double hh) {
r = rr;
h = hh;
}
double surface_area() override {
return 2 * PI * r * r + 2 * PI * r * h;
}
double volume() override {
return PI * r * r * h;
}
};
class Cube : public Container {
private:
double l;
public:
void set(double ll) {
l = ll;
}
double surface_area() override {
return l * l * 6;
}
double volume() override {
return l * l * l;
}
};
int main() {
int n, m;
double a, b;
Sphere sp;
Cylinder cy;
Cube cu;
cin >> n;
for (int i = 0; i < n; ++i) {//一开始我用的while,第一个测试点运行超时,试了好久,用for竟然通过了,如果跟我有一样情况的,希望会对你有用
cin >> m;
if (m == 1) {
cin >> a;
sp.set(a);
cout << "球体表面积:" << sp.surface_area() << ",球体体积:" << sp.volume()<<endl;
}
if (m == 2) {
cin >> a >> b;
cy.set(a, b);
cout << "圆柱体表面积:" << cy.surface_area() << ",圆柱体体积:" << cy.volume()<<endl;
}
if (m == 3) {
cin >> a;
cu.set(a);
cout << "正方体表面积:" << cu.surface_area() << ",正方体体积:" << cu.volume()<<endl;
}
}
}