定义抽象基类Shape,由它派生出五个派生类:Circle(圆形)、Square(正方形)、Rectangle( 长方形)、Trapezoid (梯形)和Triangle (三角形),用虚函数分别计算各种图形的面积,输出它们的面积和。要求用基类指针数组,每一个数组元素指向一个派生类的对象。PI=3.14159f,单精度浮点数计算。
输入格式:
输入在一行中,给出9个大于0的数,用空格分隔,分别代表圆的半径,正方形的边长,矩形的宽和高,梯形的上底、下底和高,三角形的底和高。
输出格式:
输出所有图形的面积和,小数点后保留3位有效数字。
输入样例:
12.6 3.5 4.5 8.4 2.0 4.5 3.2 4.5 8.4
输出样例:
578.109
代码如下:
#include <iostream>
using namespace std;
class Shape
{
public:
virtual double area() = 0;
};
class Circle : public Shape//圆形
{
public:
double r;
double area()
{
return 3.14159*r*r;
}
};
class Square : public Shape//正方形
{
public:
double a;
double area()
{
return a*a;
}
};
class Rectangle : public Shape//长方形
{
public:
double a;
double b;
double area()
{
return a*b;
}
};
class Trapezoid : public Shape//梯形
{
public:
double a;
double b;
double h;
double area ()
{
return (a+b)*h/2;
}
};
class Triangle : public Shape//三角形
{
public:
double a;
double h;
double area ()
{
return a*h/2;
}
};
int main()
{
double total[5];
Circle *cir = new Circle;
cin>>cir->r;
total[0] = cir->area();
Square *squ = new Square;
cin>>squ->a;
total[1] = squ->area();
Rectangle *rec = new Rectangle;
cin>>rec->a>>rec->b;
total[2] = rec->area();
Trapezoid *tra = new Trapezoid;
cin >> tra->a >> tra->b >> tra->h;
total[3] = tra->area();
Triangle *tri = new Triangle;
cin >> tri->a >> tri->h;
total[4] = tri->area();
double S = 0;//总面积
for (int i = 0; i < 5; i++)
{
S += total[i];
}
printf("%.3f" , S);
return 0;
}