定义
动态绑定是在运行期间发生的绑定,发生动态绑定的函数的运行版本由传入的实际参数类型决定,在运行时觉得函数的版本,所以动态绑定又称运行时绑定,动态绑定是C++的多态实现的一种形式。
在C++中,当使用基类的引用或指针调用一个虚函数时将发生动态绑定。
实现原理
C++中的动态绑定通过虚函数实现。而虚函数是通过一张虚函数表(virtualtable)实现的,拥有虚函数的类在实例化时会创建一张虚函数表。这个表中记录了虚函数的入口地址,当派生类对虚函数进行重写时,虚函数表中相关虚函数的地址就会被替换,以保证动态绑定时能够根据对象的实际类型调用正确的函数。
优点
1、能够提高代码的可用性,使代码更加灵活。
2、多态是设计模式的基础,能够降低耦合性。
缺点
1.需要查找虚函数表来,性能比静态函数调用低。
2.虚函数表本身需要存储空间
实例
class base {
public:
virtual void test() { cout << "Message from base\n"; }
};
class extend:public base {
public:
void test() { cout << "Message from extend\n"; }//重写基类虚函数
};
void func(base& b1,base &b2) {
b1.test();
b2.test();//使用基类的引用调用虚函数,动态绑定发生
}
int main()
{
base b;
extend e;
func(b,e);
}