在C++中,动态绑定(Dynamic Binding)通常是通过虚函数(Virtual Function)实现的。虚函数是在基类中声明的,可以在派生类中重写(Override)。当使用基类指针或引用调用虚函数时,实际调用的函数是在运行时根据对象的实际类型决定的,而不是在编译时决定的。这就是动态绑定的基本概念。
下面是一个简单的例子来说明如何在C++中使用动态绑定:
#include// 基类 Shape class Shape { public: // 虚函数 area() virtual double area() const { return 0.0; } }; // 派生类 Circle,继承自 Shape class Circle : public Shape { public: // 重写虚函数 area() double area() const override { return 3.14 * radius * radius; } private: double radius = 5.0; }; int main() { // 使用基类指针指向派生类对象 Shape* shape = new Circle(); // 调用虚函数 area(),实际调用的是派生类中的实现 std::cout << "Area: " << shape->area() << std::endl; delete shape; return 0; }
在这个例子中,我们定义了一个基类Shape
和一个派生类Circle
。Shape
类中有一个虚函数area()
,Circle
类重写了这个虚函数。在main()
函数中,我们使用Shape
类的指针指向一个Circle
类的对象,并调用area()
函数。尽管我们使用的是基类指针,但在运行时实际调用的是Circle
类中的area()
实现,这就是动态绑定的效果。