c++中动态绑定的技术实现
来源:互联网 发布:手机airdrop找不到mac 编辑:程序博客网 时间:2024/06/07 19:50
转自http://www.cnblogs.com/hustdc/p/6485913.html
1 什么是动态绑定
有一个基类,两个派生类,基类有一个virtual函数,两个派生类都覆盖了这个虚函数。现在有一个基类的指针或者引用,当该基类指针或者引用指向不同的派生类对象时,调用该虚函数,那么最终调用的是该被指向对象对应的派生类自己实现的虚函数。
2 为何能够在运行时找到派生类自己实现的虚函数呢?
2.1 肯定不是编译期指定好了的
该基类指针指向的对象可以在运行过程中被动态地改变,即该基类指针指向的地址是可以变化的。可见,是对象内部保存了关于自己和父类的虚函数的线索。因为基类每次都是指向对象本身的,它通过对象本身找到了对应的虚函数。
2.2 对象和类的数据结构的支持
虚函数是类的成员,是所有的对象所共有的,因此要特殊保存虚函数也应该是类的事情,而不是对象的事情,对象只要能够找到它们就可以了。
是这样设计的,编译起会为每个有虚函数的类都创建一个虚函数表,里面记录着每个虚函数。另外,每个对象有一个隐含指针指向它对应的类的虚函数表。
这样,在运行时,动态绑定的调用过程是这样的,首先,基类指针被赋值为派生类对象的地址,那么就可以找到指向这个类的虚函数的隐含指针,然后通过该虚函数的名字就可以在这个虚函数表中找到对应的虚函数的地址。然后进行调用就可以了。
由于继承层次中每个类都有自己的虚函数表,因此各自完成自己的动态绑定,互不影响。
阅读全文
1 0
- c++中动态绑定的技术实现
- TreeView的动态绑定(C#)
- 使用AjaxPro实现DataGrid中DropDownList的动态绑定
- C++中虚函数动态绑定的实现
- linux中动态链接延迟绑定的实现
- 动态绑定实现的原理
- C#.net实现动态绑定TreeView
- 动态绑定技术
- C#中使用BindingList 绑定DataGridView 可以实现动态绑定,优与List<T>集合的绑定
- C语言中动态数组的实现
- c语言中动态数组的实现
- C语言中动态数组的实现
- C语言中动态数组的实现
- C++中动态类型与动态绑定、虚函数、运行时多态的实现
- c++动态绑定、静态绑定与java中动态绑定与静态绑定的比较
- 使用BindingList实现DataGridView的动态绑定
- JAVA动态绑定的内部实现机制
- 实现WebService 动态 绑定 的方法
- hadoop中的DistCp和FastCopy
- Android App 瘦身总结 第三章 代码混淆及优化
- ReflectionUtils
- SpringBoot集成Redis消息订阅发布
- 每天五分钟linux(4)-mkdir
- c++中动态绑定的技术实现
- source insight utf8设置
- 检查数组是否包含某个值的方法
- BI怎么选?重点看这10个技术指标
- 设计模式简介
- 边框扩张
- CodeForces 524 C.The Art of Dealing with ATM(枚举)
- PAT 1066图像过滤 C
- Key Task HDU