动态绑定 百科内容来自于: 百度百科

动态绑定定义

动态绑定是指在执行期间(非编译期)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。
程序运行过程中,把函数(或过程)调用与响应调用所需要的代码相结合的过程称为动态绑定。

静态绑定与动态绑定

除了限制访问,访问方式也决定哪个方法将被子类调用或哪个属性将被子类访问。函数调用与函数本身的关联,以及成员访问与变量内存地址间的关系,称为绑定。在计算机语言中有两种主要的绑定方式,静态绑定和动态绑定。静态绑定发生于数据结构和数据结构间,程序执行之前。静态绑定发生于编译期,因此不能利用任何运行期的信息。它针对函数调用与函数的主体,或变量与内存中的区块。动态绑定则针对运行期产生的访问请求,只用到运行期的可用信息。在面向对象的代码中,动态绑定意味着决定哪个方法被调用或哪个属性被访问,将基于这个类本身而不基于访问范围。

C++中的动态绑定

定义:

动态绑定是将一个过程调用与相应代码链接起来的行为。是指与给定的过程调用相关联的代码,只有在运行期才可知的一种绑定,他是多态实现的具体形式。

实现原理:

C++中,通过基类的引用或指针调用虚函数时,发生动态绑定。引用(或指针)既可以指向基类对象也可以指向派生类对象,这一事实是动态绑定的关键。用引用(或指针)调用的虚函数在运行时确定,被调用的函数是引用(或指针)所指对象的实际类型所定义的。
C++中动态绑定是通过虚函数实现的。而虚函数是通过一张虚函数表(virtual table)实现的。这个表中记录了虚函数的地址,解决继承、覆盖的问题,保证动态绑定时能够根据对象的实际类型调用正确的函数。
在C++的标准规格说明书中说到,编译器必需要保证虚函数表的指针存在于对象实例中最前面的位置(这是为了保证正确取到虚函数的偏移量)。这意味着我们通过对象实例的地址得到这张虚函数表,然后就可以遍历其中函数指针,并调用相应的函数。

缺点:

1.动态绑定在函数调用时需要在虚函数表中查找,所以性能比静态函数调用稍低。
2.通过基类类型的指针访问派生类自己的虚函数将发生错误。
$firstVoiceSent
- 来自原声例句
小调查
请问您想要如何调整此模块?

感谢您的反馈,我们会尽快进行适当修改!
进来说说原因吧 确定
小调查
请问您想要如何调整此模块?

感谢您的反馈,我们会尽快进行适当修改!
进来说说原因吧 确定