如何利用C++中的多态性机制设计一个函数来计算不同图形类(如矩形、圆形等)的面积?
时间: 2024-12-16 12:21:36 浏览: 2
在C++中,为了利用多态性设计一个计算不同图形类面积的函数,可以采用虚函数和纯虚函数的概念。首先,我们创建一个公共的基类`Shape`,声明一个纯虚函数`calculateArea()`,表示所有形状都有一个计算面积的行为,但具体实现留给子类:
```cpp
class Shape {
public:
virtual double calculateArea() const = 0; // 纯虚函数,声明但不提供实现
};
// 具体的图形类,如Rectangle和Circle继承自Shape
class Rectangle : public Shape {
private:
double width, height;
public:
Rectangle(double w, double h) : width(w), height(h) {}
double calculateArea() const override { return width * height; }
};
class Circle : public Shape {
private:
double radius;
public:
Circle(double r) : radius(r) {}
double calculateArea() const override { return M_PI * pow(radius, 2); } // 使用cmath库中的M_PI
};
```
然后,你可以创建一个通用的`calculateTotalArea(const std::vector<Shape*>& shapes)`函数,接受一个`Shape`指针的向量作为参数,利用多态性自动调用每个图形的`calculateArea()`方法:
```cpp
double calculateTotalArea(const std::vector<Shape*>& shapes) {
double totalArea = 0.0;
for (const auto& shape : shapes) {
totalArea += shape->calculateArea();
}
return totalArea;
}
```
现在,无论传入的是`Rectangle`还是`Circle`的对象,这个函数都能正确计算它们的面积,因为`calculateArea()`是虚函数,在派生类中被重写。
阅读全文