1 什么是动态绑定
有一个基类,两个派生类,基类有一个virtual函数,两个派生类都覆盖了这个虚函数。现在有一个基类的指针或者引用,当该基类指针或者引用指向不同的派生类对象时,调用该虚函数,那么最终调用的是该被指向对象对应的派生类自己实现的虚函数。
2 为何能够在运行时找到派生类自己实现的虚函数呢?
2.1 肯定不是编译期指定好了的
2.2 对象和类的数据结构的支持
虚函数是类的成员,是所有的对象所共有的,因此要特殊保存虚函数也应该是类的事情,而不是对象的事情,对象只要能够找到它们就可以了。
是这样设计的,编译起会为每个有虚函数的类都创建一个虚函数表,里面记录着每个虚函数。另外,每个对象有一个隐含指针指向它对应的类的虚函数表。
由于继承层次中每个类都有自己的虚函数表,因此各自完成自己的动态绑定,互不影响。