声明抽象基类Shape,由它派生出5个派生类;Circle(圆形)、Square(正方形)、Rectangle(矩形)、Trapezoid(梯形)、Triangle(三角形),分别计算几种图形的面积,并求它们的和并显示出来。请按照要求选择如下一种方式编程实现。 注意圆周率取3.14. 实现方式: 1.使用继承和派生完成上述功能。 2.使用动态多态完成上述功能,提示:基类指针+派生类对象。 3. 使用派生类构造函数知识完成上述功能。 4. 作业竞赛要求的其他方式 输入描述 输入圆的半径 输入正方形的边长 输入矩形的长和宽 输入梯形的上底、下底、高 输入三角形的底、高 输出描述 输出每种图形的面积、所有图形面积的总和。每个面积占一行,面积前显示图形名称 样例输入 12.6 3.5 4.5 8.4 2.0 4.5 3.2 4.5 8.4 样例输出 Circle:498.51 Square:12.25 Rectangle:37.80 Trapezoid:10.40 Triangle:18.90 total of all areas=577.86书写完整代码
时间: 2024-03-18 16:40:55 浏览: 120
使用派生类构造函数完成上述功能:
```cpp
#include <iostream>
using namespace std;
const double PI = 3.14;
class Shape {
public:
virtual double area() = 0;
};
class Circle : public Shape {
private:
double r;
public:
Circle(double _r) : r(_r) {}
double area() {
return PI * r * r;
}
};
class Square : public Shape {
private:
double l;
public:
Square(double _l) : l(_l) {}
double area() {
return l * l;
}
};
class Rectangle : public Shape {
private:
double l, w;
public:
Rectangle(double _l, double _w) : l(_l), w(_w) {}
double area() {
return l * w;
}
};
class Trapezoid : public Shape {
private:
double a, b, h;
public:
Trapezoid(double _a, double _b, double _h) : a(_a), b(_b), h(_h) {}
double area() {
return (a + b) * h / 2;
}
};
class Triangle : public Shape {
private:
double b, h;
public:
Triangle(double _b, double _h) : b(_b), h(_h) {}
double area() {
return b * h / 2;
}
};
int main() {
double r, l, ll, w, a, b, h, bb, hh;
cin >> r >> l >> ll >> w >> a >> b >> h >> bb >> hh;
Circle c(r);
Square s(l);
Rectangle rect(ll, w);
Trapezoid trap(a, b, h);
Triangle tri(bb, hh);
cout << "Circle:" << c.area() << endl;
cout << "Square:" << s.area() << endl;
cout << "Rectangle:" << rect.area() << endl;
cout << "Trapezoid:" << trap.area() << endl;
cout << "Triangle:" << tri.area() << endl;
cout << "total of all areas=" << c.area() + s.area() + rect.area() + trap.area() + tri.area();
return 0;
}
```
阅读全文