程序员不需要了解虚函数表即多态的实现原理,我们只需要知道如何用就可以了
这种态度,很难成为一个真正的c++高手, 甚至很难成为技术高手。
只要有一个 virtual 函数,class 以及派生类的数据头部(一般是第一个位置)就都包含有一指针,该指针指向一个虚函数表,每一个类都有自己的虚函数表,该表中存放各个虚函数的地址,即函数指针。B->f() 调用时, 从 B 的头部取出指针,找到虚函数执行,即:
typedef void (*FunctionPtr)()
FunctionPtr* vtable = (FunctionPtr*) B; //虚函数表
(*vtable[0])(); // call f();
|