利用虚函数求N个图形的表面积和体积

定义抽象类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;
        }
    }
}
发布了163 篇原创文章 · 获赞 18 · 访问量 7683

猜你喜欢

转载自blog.csdn.net/xcdq_aaa/article/details/105440902