什么是虚函数表和虚函数指针
时间: 2023-12-27 09:36:50 浏览: 112
关于vptr(虚指针)和vtbl(虚函数表)1
虚函数表(Virtual Function Table)是用于实现C++中的多态(Polymorphism)的一种机制。当一个类中声明了虚函数时,编译器会为这个类创建一个虚函数表。虚函数表是一个存储了虚函数地址的表格,每个包含虚函数的类都有自己的虚函数表。
虚函数指针(Virtual Function Pointer)是一个指向虚函数表的指针。每个包含虚函数的对象都会在其内存布局中包含一个虚函数指针。当通过基类指针或引用调用虚函数时,实际调用的是由该对象所属的实际派生类的虚函数。
通过虚函数表和虚函数指针的组合,C++实现了运行时多态性。当使用基类指针或引用调用虚函数时,实际调用的是派生类中重写(override)的虚函数,而不是基类中的虚函数。这样可以实现动态绑定,使得程序能够在运行时根据对象的实际类型来确定调用哪个函数。
需要注意的是,只有在使用基类指针或引用调用虚函数时才会发生动态绑定,使用对象本身的指针或引用调用虚函数时,会根据对象的静态类型来确定调用哪个函数。
阅读全文