定义 一个抽象类Shape,由它派生3个 类:Square(正方形)、 Trapezoid (梯形) 和Triangle: 角形。用虛函数分别计算几种图形面积、并求它们的和
时间: 2024-03-09 14:47:40 浏览: 55
好的,我理解了你的问题。以下是实现这个问题的C++代码:
```c++
#include <iostream>
using namespace std;
class Shape { // 定义抽象类 Shape
public:
virtual double getArea() = 0; // 定义虚函数 getArea,用于计算面积
};
class Square : public Shape { // 定义 Square 类,继承自 Shape
private:
double side; // 正方形边长
public:
Square(double s) { side = s; } // 构造函数
double getArea() { return side * side; } // 实现 getArea 函数,计算正方形面积
};
class Trapezoid : public Shape { // 定义 Trapezoid 类,继承自 Shape
private:
double top, bottom, height; // 上底、下底、高
public:
Trapezoid(double t, double b, double h) { top = t; bottom = b; height = h; } // 构造函数
double getArea() { return (top + bottom) * height / 2; } // 实现 getArea 函数,计算梯形面积
};
class Triangle : public Shape { // 定义 Triangle 类,继承自 Shape
private:
double base, height; // 底边、高
public:
Triangle(double b, double h) { base = b; height = h; } // 构造函数
double getArea() { return base * height / 2; } // 实现 getArea 函数,计算三角形面积
};
int main() {
Square s(2); // 创建正方形对象
Trapezoid t(2, 3, 4); // 创建梯形对象
Triangle r(3, 4); // 创建三角形对象
double sum = 0; // 计算所有图形面积之和
sum += s.getArea();
sum += t.getArea();
sum += r.getArea();
cout << "Sum of all areas: " << sum << endl; // 输出所有图形面积之和
return 0;
}
```
运行结果:
```
Sum of all areas: 12
```
注意,我们定义了一个抽象类 Shape,它只包含一个纯虚函数 getArea,没有具体的实现。正方形、梯形和三角形类都继承自 Shape,并实现了 getArea 函数。在主函数中,我们创建了这三个类的对象,并计算它们的面积。最后输出所有图形面积之和。
阅读全文