返回
PTA虚函数技巧: 面向对象的几何图形面积计算
闲谈
2024-02-23 23:54:00
利用虚函数计算图形面积:面向对象编程的强大功能
面向对象编程 (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
和派生类,我们可以使用一个统一的界面来处理不同类型的图形。虚函数允许派生类重写基类的方法,从而为每个图形提供特定的面积计算实现。
常见问题解答
-
什么是虚函数?
虚函数是允许派生类重写基类方法的函数。 -
抽象基类有什么用?
抽象基类提供了一个接口,允许派生类共享共同的属性和方法,而无需实现具体细节。 -
为什么使用面向对象编程来计算图形面积?
面向对象编程将数据和行为封装在对象中,这使得计算图形面积的代码更易于组织和维护。 -
如何使用虚函数计算图形面积?
创建抽象基类Shape
,其中包含一个用于计算面积的纯虚函数area()
. 然后,从Shape
类派生出具体图形类,并重写area()
函数以提供每个图形的特定面积计算。 -
虚函数和多态性之间有什么关系?
虚函数是实现多态性的关键机制,多态性允许对象的行为根据其类型而有所不同。