什么是虚表?为什么要有虚表他在C++中的作用又是什么?
虚表就是虚函数表的简称,虚函数表是通过一块连续内存来存储虚函数的地址,这张表解决了继承,虚函数(重写)的问题。在有虚函数的对象实例中都存在一张虚函数表,虚函数表就像一张地图,指明了实际应用调用的虚函数。众所周知C++的继承和多态是相比于C的一大优势,而多态的实现和虚函数表密切相关。多态顾名思义就是“多种形态”,C++中虚函数的主要作用就是实现多态,简单说父类的指针/引用调用重写虚函数,当父类指针/引用指向父类对象时调用的是父类的虚函数,指向子类对象时调用的是子类的虚函数。接下来我们通过代码和图是的方法来进一步了解。
class Base
{
public:
virtual void func1()
{
cout << "Base::fun1" << endl;
}
virtual void func2()
{
cout << "Base::fun2" << endl;
}
private:
int a;
};
单继承的对象模型