虚表与动态绑定

这个过程由编译器自动完成。

虚表

  • 每个多态类有一个虚表(virtual table)
  • 虚表中有当前类的各个虚函数的入口地址
  • 每个对象有一个指向当前类的虚表的指针(虚指针vptr)

    动态绑定的实现

  • 构造函数中为对象的虚指针赋值

  • 通过多态类型的指针或引用调用成员函数时,通过虚指针找到虚表,进而找到所调用的虚函数的入口地址
  • 通过该入口地址调用虚函数

    虚表示意图

    image.png

    参考:

    https://www.bilibili.com/video/BV1q741137Gf?p=22