当编译器发现我们的类中有虚函数的时候,编译器会创建一张虚函数表,把虚函数的函数入口地址放到虚函数表中,并且在类中秘密增加一个指针,这个指针就是vpointer(缩写vptr),这个指针是指向对象的虚函数表。
在多态调用的时候,根据vptr指针,找到虚函数表来实现动态绑定。
当虚函数涉及到继承的时候 子类 会继承 父类的(虚函数指针vfptr 虚函数表vftable)
编译器会将虚函数表中的函数入口地址 更新 成子类的 同名(返回值、参数都相同)的函数入口地址。
如果基类指针、引用 访问虚函数的时候 就会 间接的调用 子类的虚函数。