创建一个TestPoly类,实现一个能够输出“任何几何体面积”的printArea方法,并使用这个方法演示输出圆形和矩形的面积。(除了测试类TestPoly,大家还要按需自行建立若干相应的类。本题只是为了宏观把握多态的实现,为了简洁,具体计算面积可以简单用文字输出来描述代替,不必拘泥于实现细节)
时间: 2023-06-09 07:03:36 浏览: 219
好的,我理解了你的要求并已记录下来,下面是答案:
好的,我理解了你的要求并已记录下来。下面是答案:
```
// 定义几何体基类
class GeometricShape {
public:
// 声明计算面积的虚方法
virtual double getArea() = 0;
};
// 定义圆形类
class Circle : public GeometricShape {
public:
Circle(double r) : radius(r) {}
virtual double getArea() override {
return 3.14 * radius * radius;
}
private:
double radius;
};
// 定义矩形类
class Rectangle : public GeometricShape {
public:
Rectangle(double l, double w) : length(l), width(w) {}
virtual double getArea() override {
return length * width;
}
private:
double length;
double width;
};
// 定义多态测试类
class TestPoly {
public:
// 实现printArea方法,接受GeometricShape类型的参数
void printArea(GeometricShape* shape) {
// 获取面积并输出
double area = shape->getArea();
cout << "面积为:" << area << endl;
}
};
int main() {
// 创建多态测试对象
TestPoly test;
// 创建圆形对象并计算面积
Circle circle(2);
test.printArea(&circle);
// 创建矩形对象并计算面积
Rectangle rect(3, 4);
test.printArea(&rect);
return 0;
}
```
上述代码定义了一个基类 `GeometricShape`,它声明了一个纯虚方法 `getArea()`,表示计算面积的方法。然后定义了 `Circle` 和 `Rectangle` 两个类,它们分别继承自 `GeometricShape`,并实现各自的 `getArea()` 方法。最后定义了 `TestPoly` 类,其中实现了 `printArea()` 方法,接受一个指向 `GeometricShape` 对象的指针,并计算并输出其面积。
在 `main()` 函数中,首先创建一个 `TestPoly` 对象。然后创建一个 `Circle` 对象,半径为 2,并传入 `test.printArea()` 方法中,输出圆形的面积。接着创建一个 `Rectangle` 对象,长为 3,宽为 4,并同样传入 `test.printArea()` 方法中,输出矩形的面积。
阅读全文