编写一个程序计算正方形圆形三角形图形面积要求抽象出一个基类shape,在其中说明一个纯虚函数用来求边长,利用派生类定义正方形、圆形,三角形,并求出这三种图形的面积,
时间: 2024-02-18 12:59:00 浏览: 76
设计一个抽象类图形类,在该类中包含有至少两个抽象方法求周长和求面积,分别定义圆形类、长方形类、正方形类、三角形类来继承图形类,并实现上述两个方法
5星 · 资源好评率100%
好的,以下是实现代码:
```c++
#include <iostream>
using namespace std;
class Shape {
public:
virtual double getLength() = 0; // 纯虚函数,求边长
virtual double getArea() = 0; // 纯虚函数,求面积
};
class Square : public Shape {
private:
double side; // 正方形的边长
public:
Square(double s) : side(s) {}
virtual double getLength() { return side; } // 重写求边长的纯虚函数
virtual double getArea() { return side * side; } // 重写求面积的纯虚函数
};
class Circle : public Shape {
private:
double radius; // 圆形的半径
public:
Circle(double r) : radius(r) {}
virtual double getLength() { return 2 * 3.14 * radius; } // 重写求边长的纯虚函数
virtual double getArea() { return 3.14 * radius * radius; } // 重写求面积的纯虚函数
};
class Triangle : public Shape {
private:
double side1, side2, side3; // 三角形的三边长
public:
Triangle(double s1, double s2, double s3) : side1(s1), side2(s2), side3(s3) {}
virtual double getLength() { return side1 + side2 + side3; } // 重写求边长的纯虚函数
virtual double getArea() {
double p = (side1 + side2 + side3) / 2; // 计算半周长
return sqrt(p * (p - side1) * (p - side2) * (p - side3)); // 使用海伦公式计算面积
} // 重写求面积的纯虚函数
};
int main() {
Shape* shapes[3]; // 使用指针数组存储不同的形状
shapes[0] = new Square(5); // 创建正方形对象
shapes[1] = new Circle(3); // 创建圆形对象
shapes[2] = new Triangle(3, 4, 5); // 创建三角形对象
for (int i = 0; i < 3; i++) {
cout << "Shape " << i+1 << " area: " << shapes[i]->getArea() << endl; // 调用不同对象的求面积函数
}
return 0;
}
```
代码中定义了一个基类 `Shape`,其中包含两个纯虚函数 `getLength()` 和 `getArea()`,分别用来求边长和面积。然后分别定义了三个派生类 `Square`、`Circle` 和 `Triangle`,分别表示正方形、圆形和三角形。这三个派生类都重写了基类中的纯虚函数,实现了各自的求边长和求面积的方法。最后在 `main()` 函数中创建了三个不同的对象,并通过指针数组存储了起来,然后遍历这个指针数组,调用不同对象的求面积函数,输出结果。
阅读全文