1、题目描述:
有几何类型:圆形Circle、正方形Square,根据输入构造若干个几何对象,并计算指定形状对象的面积之和,精确到小数点后4位。
说明:
控制精度语句:假定sum表示所求面积之和,则语句为:
cout<<fixed<<setprecision(4)<<sum<<endl;
相应的头文件为<iomanip.h>
控制精度语句:假定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
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、运行截图: