1.基类Shape类是一个表示形状的抽象类,Area( )为求图形面积的方法。请从Shape类派生出三角形类(Triangle)、圆类(Circle),并实现具体的求面积方法Area( ),并在主函数中多态的实现调用。
时间: 2024-10-08 21:03:56 浏览: 25
首先,我们定义一个名为`Shape`的基类,它包含一个纯虚函数`virtual double Area(void)`,代表所有形状的面积计算方法。接着,我们创建两个派生类`Triangle`和`Circle`,它们分别继承自`Shape`,并且实现各自的`Area`方法。
```c
// Shape.h
#pragma once
#include <iostream>
class Shape {
public:
// 抽象方法,声明但不实现求面积
virtual double Area(void) const = 0;
};
// Triangle.h
class Triangle : public Shape {
private:
double base, height;
public:
Triangle(double b, double h) : base(b), height(h) {}
double Area(void) const override { return 0.5 * base * height; }
};
// Circle.h
class Circle : public Shape {
private:
double radius;
public:
Circle(double r) : radius(r) {}
double Area(void) const override { return M_PI * radius * radius; }
};
int main() {
Shape* shapes[2] = {new Triangle(3, 4), new Circle(5)};
for (const auto* shape : shapes) {
std::cout << "Area of the shape: " << shape->Area() << "\n";
delete shape; // 注意手动删除动态分配的内存
}
return 0;
}
```
在这个例子中,我们在`main`函数中创建了`Triangle`和`Circle`的对象,并存储在一个`Shape`类型的数组中。然后,我们使用多态性通过指针调用各自对象的`Area`方法。由于`Area`被声明为虚函数,因此即使引用的是父类指针,也可以正确地调用派生类的实现。
阅读全文