每日打卡-29
一.问题描述
定义抽象基类Shape,由它派生出五个派生类:Circle(圆形)、Square(正方形)、Rectangle( 长方形)、Trapezoid (梯形)和Triangle (三角形),用虚函数分别计算各种图形的面积,输出它们的面积和。要求用基类指针数组,每一个数组元素指向一个派生类的对象。PI=3.14159f,单精度浮点数计算。
二.设计思路
三.流程图
四.伪代码
1
五.代码实现
#include<iostream>
#include<iomanip>
using namespace std;
class Shape
{
public:
virtual double area() const = 0;
};
class Circle :public Shape
{
public:
Circle(double r) :radius(r) { }
virtual double area() const
{
return 3.14159 * radius * radius;
}
protected:
double radius;
};
class Square :public Shape
{
public:
Square(double s) :side(s)
{
}
virtual double area() const
{
return side * side;
}
protected:
double side;
};
class Rectangle :public Shape
{
public:
Rectangle(double w, double h) :width(w), height(h)
{
}
virtual double area() const
{
return width * height;
}
protected:
double width, height;
};
class Trapezoid :public Shape
{
public:
Trapezoid(double t, double b, double h) :top(t), bottom(b), height(h)
{
}
virtual double area() const
{
return 0.5 * (top + bottom) * height;
}
protected:
double top, bottom, height;
};
class Triangle :public Shape
{
public:
Triangle(double w, double h) :width(w), height(h)
{
}
virtual double area() const
{
return 0.5 * width * height;
}
protected:
double width, height;
};
int main()
{
double a, b, c;
cin >> a;
Circle a1(a);
cin >> a;
Square a2(a);
cin >> a >> b;
Rectangle a3(a, b);
cin >> a >> b >> c;
Trapezoid a4(a, b, c);
cin >> a >> b;
Triangle a5(a, b);
Shape* pt[5] =
{
&a1,&a2,&a3,&a4,&a5
};
double areas = 0.0;
for (int i = 0; i < 5; i++)
{
areas = areas + pt[i]->area();
}
cout << fixed << setprecision(3) << areas << endl;
return 0;
}