济宁网站建设专家,济南市住房城乡建设网站,公众号江苏建设信息网站,系统开发环境有哪些1 什么是动态绑定 有一个基类#xff0c;两个派生类#xff0c;基类有一个virtual函数#xff0c;两个派生类都覆盖了这个虚函数。现在有一个基类的指针或者引用#xff0c;当该基类指针或者引用指向不同的派生类对象时#xff0c;调用该虚函数#xff0c;那么最终调用的…1 什么是动态绑定 有一个基类两个派生类基类有一个virtual函数两个派生类都覆盖了这个虚函数。现在有一个基类的指针或者引用当该基类指针或者引用指向不同的派生类对象时调用该虚函数那么最终调用的是该被指向对象对应的派生类自己实现的虚函数。 2 为何能够在运行时找到派生类自己实现的虚函数呢 2.1 肯定不是编译期指定好了的 因为可以在运行时动态的改变该基类指针指向的对象。也就是说该基类指针指向的地址是可以变化的。可见是对象内部保存了关于自己和父类的虚函数的线索。因为基类每次都是指向对象本身的它通过对象本身找到了对应的虚函数。 2.2 对象和类的数据结构的支持 虚函数是类的成员是所有的对象所共有的因此要特殊保存虚函数也应该是类的事情而不是对象的事情对象只要能够找到它们就可以了。 是这样设计的编译起会为每个有虚函数的类都创建一个虚函数表里面记录着每个虚函数。另外每个对象有一个隐含指针指向它对应的类的虚函数表。 这样在运行时动态绑定的调用过程是这样的首先基类指针被赋值为派生类对象的地址那么就可以找到指向这个类的虚函数的隐含指针然后通过该虚函数的名字就可以在这个虚函数表中找到对应的虚函数的地址。然后进行调用就可以了。 由于继承层次中每个类都有自己的虚函数表因此各自完成自己的动态绑定互不影响。 转载于:https://www.cnblogs.com/hustdc/p/6485913.html