C++入门——60s从0到1
利用虚函数实现动态多样性
动态多样性是指在运行时根据对象的实际类型调用相应的方法。在C++中,利用虚函数可以实现动态多样性。
虚函数是一种特殊的成员函数,它可以被派生类重写。在基类中声明一个虚函数,并在派生类中重新定义这个函数时,可以使用关键字`override`。当使用基类指针或引用调用虚函数时,实际上会调用派生类中的函数。
下面是一个简单的示例代码,演示了如何使用虚函数实现动态多样性:
#include <iostream> using namespace std; // 基类 Shape class Shape { public: virtual double area() = 0; // 纯虚函数 }; // 派生类 Rectangle class Rectangle: public Shape { public: double width; double height; Rectangle(double w, double h): width(w), height(h) {} double area() override { return width * height; } // 重写虚函数 }; // 派生类 Circle class Circle: public Shape { public: double radius; Circle(double r): radius(r) {} double area() override { return 3.14 * radius * radius; } // 重写虚函数 }; int main() { Shape* shape1 = new Rectangle(5, 6); Shape* shape2 = new Circle(3); cout << "The area of rectangle is " << shape1->area() << endl; cout << "The area of circle is " << shape2->area() << endl; delete shape1; delete shape2; return 0; }
在上面的代码中,我们定义了一个抽象基类`Shape`,它包含一个纯虚函数`area()`。然后我们定义了两个派生类`Rectangle`和`Circle`,它们都重写了`Shape`中的虚函数`area()`。在`main()`函数中,我们创建了一个`Shape`类型的指针,并将其分别指向一个`Rectangle`对象和一个`Circle`对象。然后我们调用了它们的`area()`方法,输出了它们的面积。由于这两个对象都是`Shape`类型的,所以我们可以在不知道它们具体类型的前提下调用它们的`area()`方法。这就是动态多样性的实现方式之一。通过这种方式,我们可以编写更加灵活和可扩展的代码。