在C++中,动态绑定(Dynamic Binding)通常是通过虚函数(Virtual Function)实现的。虚函数是在基类中声明的,可以在派生类中重写(Override)。当使用基类指针或引用调用虚函数时,实际调用的函数是在运行时根据对象的实际类型决定的,而不是在编译时决定的。这就是动态绑定的基本概念。
下面是一个简单的例子来说明如何在C++中使用动态绑定:
#include <iostream>
// 基类 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()
实现,这就是动态绑定的效果。