虚函数通过虚函数表来表现。
虚函数表存放的内容:类的虚函数地址。
虚函数表建立时间:编译阶段,程序的编译过程中会将虚函数的地址放在虚函数表中。
在类对象的内存空间保存了指向虚函数表的指针(虚表指针)
通过虚表指针找到对应的虚函数表。
虚表指针保存的位置:类对象内存空间的最前面,这是为了正确取到虚函数的偏移量。
注:
虚表和类绑定,可以说虚表只有一张。虚表指针和类对象绑定,一个类的每个对象都有自己的虚表指针,用来指向类的虚函数表。
继承下的虚表结构
假设如果派生类没有重写基类的虚函数A,则派生类的虚函数表中保存的是基类的虚函数A的地址。
如果派生类重写了基类的虚函数B,则派生类的虚函数保存的是重写后虚函数B的地址,而基类的虚函数表任然保存基类虚函数B的地址,也就是基类不会变。