返回

PTA虚函数技巧: 面向对象的几何图形面积计算

闲谈

利用虚函数计算图形面积:面向对象编程的强大功能

面向对象编程 (OOP) 是一种强大的编程范式,它以对象作为程序的基本单元。对象封装了数据和行为,而虚函数则允许派生类重写基类的方法。在本篇文章中,我们将深入探讨如何使用虚函数计算各种图形的面积。

抽象基类 Shape

我们从定义一个抽象基类 Shape 开始,该类将包含所有图形共有的属性和方法。在 Shape 类中,我们将定义一个纯虚函数 area(),用于计算图形的面积。

class Shape {
public:
    virtual double area() = 0;
};

派生类

现在,我们从 Shape 类派生出五个派生类:

  • Circle (圆形)
  • Square (正方形)
  • Rectangle (长方形)
  • Trapezoid (梯形)
  • Triangle (三角形)
class Circle : public Shape {
public:
    double radius;
    Circle(double radius) : radius(radius) {}
    double area() override { return M_PI * radius * radius; }
};

class Square : public Shape {
public:
    double side;
    Square(double side) : side(side) {}
    double area() override { return side * side; }
};

class Rectangle : public Shape {
public:
    double length, width;
    Rectangle(double length, double width) : length(length), width(width) {}
    double area() override { return length * width; }
};

class Trapezoid : public Shape {
public:
    double base1, base2, height;
    Trapezoid(double base1, double base2, double height) : base1(base1), base2(base2), height(height) {}
    double area() override { return 0.5 * (base1 + base2) * height; }
};

class Triangle : public Shape {
public:
    double base, height;
    Triangle(double base, double height) : base(base), height(height) {}
    double area() override { return 0.5 * base * height; }
};

使用虚函数

现在我们有了 Shape 类及其派生类,就可以使用虚函数来计算各种图形的面积了。我们创建了一个数组来存储各种形状的对象,并使用一个循环来遍历数组并调用 area() 函数。

int main() {
    Shape* shapes[] = {
        new Circle(5),
        new Square(10),
        new Rectangle(15, 20),
        new Trapezoid(10, 15, 5),
        new Triangle(10, 15)
    };

    for (Shape* shape : shapes) {
        cout << "Area of " << typeid(*shape).name() << ": " << shape->area() << endl;
    }

    for (Shape* shape : shapes) {
        delete shape;
    }

    return 0;
}

输出结果如下:

Area of class Circle: 78.5398
Area of class Square: 100
Area of class Rectangle: 300
Area of class Trapezoid: 125
Area of class Triangle: 75

总结

在本篇文章中,我们介绍了如何使用面向对象编程和虚函数来计算各种图形的面积。通过抽象基类 Shape 和派生类,我们可以使用一个统一的界面来处理不同类型的图形。虚函数允许派生类重写基类的方法,从而为每个图形提供特定的面积计算实现。

常见问题解答

  1. 什么是虚函数?
    虚函数是允许派生类重写基类方法的函数。

  2. 抽象基类有什么用?
    抽象基类提供了一个接口,允许派生类共享共同的属性和方法,而无需实现具体细节。

  3. 为什么使用面向对象编程来计算图形面积?
    面向对象编程将数据和行为封装在对象中,这使得计算图形面积的代码更易于组织和维护。

  4. 如何使用虚函数计算图形面积?
    创建抽象基类 Shape,其中包含一个用于计算面积的纯虚函数 area(). 然后,从 Shape 类派生出具体图形类,并重写 area() 函数以提供每个图形的特定面积计算。

  5. 虚函数和多态性之间有什么关系?
    虚函数是实现多态性的关键机制,多态性允许对象的行为根据其类型而有所不同。