当编译器发现我们的类中有虚函数的时候,编译器会创建一张虚函数表,把虚函数的函数入口地址放到虚函数表中,并且在类中秘密增加一个指针,这个指针就是vpointer(缩写vptr),这个指针是指向对象的虚函数表。
在多态调用的时候,根据vptr指针,找到虚函数表来实现动态绑定。
当虚函数涉及到继承的时候 子类 会继承 父类的(虚函数指针vfptr 虚函数表vftable)
编译器会将虚函数表中的函数入口地址 更新 成子类的 同名(返回值、参数都相同)的函数入口地址。
如果基类指针、引用 访问虚函数的时候 就会 间接的调用 子类的虚函数。
本文深入探讨了C++中虚函数与多态的工作原理,包括虚函数表(vtable)和虚函数指针(vptr)的概念。解析了如何通过vptr定位虚函数表,实现在运行时动态绑定虚函数,以及子类继承父类虚函数时的更新过程。
538

被折叠的 条评论
为什么被折叠?



