编写一个程序计算“正方形、圆形、三角形”三种图形的面积,要求: (1)抽象出一个基类Shape; (2)在其中说明一个纯虚函数用来求边长; (3)利用派生类定义“正方形、圆形、三角形”,并求出这三种图形的面积。 (4)编写主函数测试以上代码,要求以多态来实现。
时间: 2023-09-13 10:05:18 浏览: 276
好的,以下是完整的代码实现:
```c++
#include <iostream>
#include <cmath>
using namespace std;
class Shape {
public:
virtual double getSide() = 0; // 纯虚函数,求边长
virtual double calcArea() = 0; // 纯虚函数,求面积
};
class Square: public Shape {
private:
double side;
public:
Square(double s) {
side = s;
}
double getSide() {
return side;
}
double calcArea() {
return side * side;
}
};
class Circle: public Shape {
private:
double radius;
public:
Circle(double r) {
radius = r;
}
double getSide() {
return radius;
}
double calcArea() {
return 3.14 * radius * radius;
}
};
class Triangle: public Shape {
private:
double a, b, c;
public:
Triangle(double aa, double bb, double cc) {
a = aa;
b = bb;
c = cc;
}
double getSide() {
return a + b + c;
}
double calcArea() {
double p = (a + b + c) / 2.0;
return sqrt(p * (p - a) * (p - b) * (p - c));
}
};
int main() {
Shape *s1 = new Square(5.0);
Shape *s2 = new Circle(3.0);
Shape *s3 = new Triangle(3.0, 4.0, 5.0);
cout << "正方形的面积:" << s1->calcArea() << endl;
cout << "圆形的面积:" << s2->calcArea() << endl;
cout << "三角形的面积:" << s3->calcArea() << endl;
delete s1;
delete s2;
delete s3;
return 0;
}
```
运行结果:
```
正方形的面积:25
圆形的面积:28.26
三角形的面积:6
```
在这个程序中,我们定义了一个抽象基类 `Shape`,其中有两个纯虚函数 `getSide()` 和 `calcArea()`。然后我们分别派生出了 `Square`、`Circle` 和 `Triangle` 三个类,并分别实现了它们的 `getSide()` 和 `calcArea()` 函数。最后在主函数中,我们使用多态的方式创建了三个不同的对象,并且分别调用了它们的 `calcArea()` 函数,得到了三种不同图形的面积。
阅读全文