Blog
Notes
Archives
About
Contact
Blog
Notes
Archives
About
Contact
静态绑定和动态绑定
1. 什么是绑定?
2. 什么是静态绑定和动态绑定?
静态绑定
动态绑定
12-多态
多态是C++面向对象三大特性之一
静态多态:函数重载 和 运算符重载属于静态多态,复用函数名
动态多态:派生类和虚函数实现运行时多态
静态多态和动态多态的区别:
静态多态的函数地址早绑定——编译阶段确定函数地址
动态多态的函数地址晚绑定——运行阶段确定函数地址
静态绑定和动态绑定
1. 什么是绑定?
把一个方法和类对象关联起来的方法叫绑定
绑定(Binding)是指将
变量
和
函数名
转换为地址的过程。
2. 什么是静态绑定和动态绑定?
静态绑定
静态绑定,又叫前期绑定,指在程序运行前就已经知道方法是属于哪个类的,在编译期间就可以链接到类中,定位到这个方法。静态绑定发生于编译器,因此不能利用任何运行期的信息。
早期绑定
意味着绑定的函数或者变量,已经在编译阶段,该语句已经被编译成“
call 函数地址
”或"
callq 函数地址
“这样的汇编指令格式(如下图所示),并且这些汇编指令中的函数地址在程序编译后是固定不变的,请记住,所有函数都有唯一的地址。 因此,当编译器(或链接器)遇到函数调用时,它将用机器语言指令替换该函数调用,该指令告诉CPU跳转到该函数的地址,因此
早期绑定
也叫
静态绑定
。
动态绑定
动态绑定是指在程序运行过程中,根据具体的实例对象才能具体确定是调用了哪个方法。也就是说,动态绑定只能用到运行期的可用信息。
在一些带有决策性的业务逻辑的代码中,要等到用户的反馈(通常是条件判断/参数类型判定…),直到运行时,根据决策的结果才能知道将调用哪个函数。这称为后期绑定(或动态绑定),动态绑定的技术的本源就是函数指针(也可以称为
函数原型
)。在C ++中
运行时多态
正是使用的就是函数指针。
参考文献:
14 C++ 静态绑定和动态绑定 - 知乎 (zhihu.com)
第18篇:C++ 静态绑定和动态绑定 - 知乎 (zhihu.com)
c++中的函数重载、函数重写、函数重定义
Please enable JavaScript to view the
comments powered by Disqus.
comments powered by
Disqus