题目描述 使用c++声明抽象基类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-17 16:44:28 浏览: 60
以下是第一种方式的实现,使用继承和派生完成上述功能:
```cpp
#include <iostream>
using namespace std;
const double PI = 3.14;
// 抽象基类
class Shape {
public:
virtual double getArea() = 0; // 纯虚函数
};
// 圆形
class Circle : public Shape {
private:
double radius;
public:
Circle(double r) {
radius = r;
}
double getArea() {
return PI * radius * radius;
}
};
// 正方形
class Square : public Shape {
private:
double side;
public:
Square(double s) {
side = s;
}
double getArea() {
return side * side;
}
};
// 矩形
class Rectangle : public Shape {
private:
double length, width;
public:
Rectangle(double l, double w) {
length = l;
width = w;
}
double getArea() {
return length * width;
}
};
// 梯形
class Trapezoid : public Shape {
private:
double upper, lower, height;
public:
Trapezoid(double u, double l, double h) {
upper = u;
lower = l;
height = h;
}
double getArea() {
return (upper + lower) * height / 2.0;
}
};
// 三角形
class Triangle : public Shape {
private:
double base, height;
public:
Triangle(double b, double h) {
base = b;
height = h;
}
double getArea() {
return base * height / 2.0;
}
};
int main() {
double r, s, l, w, u, l1, h1, b, h2;
cin >> r >> s >> l >> w >> u >> l1 >> h1 >> b >> h2;
Circle circle(r);
Square square(s);
Rectangle rectangle(l, w);
Trapezoid trapezoid(u, l1, h1);
Triangle triangle(b, h2);
double totalArea = circle.getArea() + square.getArea() + rectangle.getArea() + trapezoid.getArea() + triangle.getArea();
cout << "Circle:" << circle.getArea() << endl;
cout << "Square:" << square.getArea() << endl;
cout << "Rectangle:" << rectangle.getArea() << endl;
cout << "Trapezoid:" << trapezoid.getArea() << endl;
cout << "Triangle:" << triangle.getArea() << endl;
cout << "total of all areas=" << totalArea << endl;
return 0;
}
```
阅读全文