7-3 利用虚函数求N个图形的表面积和体积 (10 point(s))
定义抽象类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
收获
- 题目没有说精度,不要自己设置精度。
- 能用for用for吧,简单
- 不要用while(n)
- 如果标准输入是1、2、3,那么输入一个4当用while(n)的时候可能不会终止循环,while(n)当不是0的时候就进行,而default也没有更改的话,循环就会一直进行。
#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 radius;
public:
Sphere(double a = 0):radius(a){
};
double surface_area(){
return 4*PI*radius*radius;
}
double volume(){
return 4.0/3*PI*radius*radius*radius;
}
void display(){
cout<<"球体表面积:"<<surface_area()<<",球体体积:"<<volume()<<endl;