继承---指定面积求和

1、题目描述:
       有几何类型:圆形Circle、正方形Square,根据输入构造若干个几何对象,并计算指定形状对象的面积之和,精确到小数点后4位。
     说明:
     控制精度语句:假定sum表示所求面积之和,则语句为:
     cout<<fixed<<setprecision(4)<<sum<<endl;
     相应的头文件为<iomanip.h>
   输入样例:(输入6个形状对象,每行由两个数据组成,第一个数据表示几何对象类型,第二个数据表示该对    象的半径(圆)或者宽度(正方形)。最后计算指定类型几何对象对象面积之和,指定的几何对象类型由最后      一行输入确定,样例中指定计算circle类型对象面积之和)

       6
       circle 3.0
       square 5.0
       circle 7.0
       square 6.0
       circle 9.0
       circle 5.0
       circle
    输出样例:
       515.2212

2、解释:很明显,这两个均需计算面积之和,在多组输入中circle和square的个数不同而且输出是指定类型的输出。而circle和square的计算面积的方法有差别,所以提出公共部分定义为基类,两者不同之处分别定为派生类,即继承。

3、代码实现:
#include <iostream>
#include <string>
#include <iomanip>

using namespace std;

class Shape
{
protected:
    double x;
public:
    virtual double area() = 0;
};

class Circle:public Shape
{
public:
    Circle(double w) : Shape()
    {
        x = w;
    }
    double area()
    {
        return 3.1415926*x*x;
    }

};

class Square:public Shape
{
public:
    Square(double w) : Shape()
    {
        x = w;
    }
    double area()
    {
        return x*x;
    }
};

int N;

int main()
{
    cout<<"请输入数据个数:";
    cin >> N;
    cout<<endl;
    double S1 = 0, S2 = 0;
    Shape *sp;
    for(int i =0 ; i < N; i++)
    {
        string s;
        double e;
        cout<<"请输入形状类型和半径或边:";
        cin >> s >> e;
        cout<<endl<<endl;
        if(s=="circle")
        {
            sp = new Circle(e);
            S1 += sp->area();
        }

        else
        {
            sp = new Square(e);
            S2 += sp->area();
        }

    }
    cout<<"请输入输出形状类型:";
    string s;
    cin >> s;
    cout<<endl;
    if(s == "circle")
        cout<<"circle面积之和为:"<<fixed<<setprecision(4)<<S1<<endl;
    else
        cout<<"square面积之和为:"<<fixed<<setprecision(4)<<S2<<endl;
    return 0;
}
4、运行截图:

猜你喜欢

转载自blog.csdn.net/weixin_42193674/article/details/81063202
今日推荐