关于静态绑定与动态绑定的辨别笔记----C++学习之路

来源:互联网 发布:淘宝用的什么web服务器 编辑:程序博客网 时间:2024/06/09 18:09

  1.从代码来看:

假设有继承关系:C->B->A

B b;A a = (A)b;a.vfunc1();
a是一个A类型的对象,赋值转型后的b。

那么通过a来调用的虚函数vfunc1(),它是通过对象来访问的,静态绑定。在汇编里面就是call XXX

A* pa = new B;pa->vfunc1();
从这里可以看到,通过一个指针pa来访问vfunc1(),满足第一个条件通过指针,第二个,访问虚函数,最后看向上转型

new出来的B,但是type是个A,那么就是向上转型。是动态绑定。

从底层编译器看到:call dword ptr [edx],这一句call后面的不再是一个固定的地址了。

(*(p->vptr)[n])(p);C语言下的。


动态绑定是继承与虚机制中的一种很特殊的东西。