C++ 虚函数表

虚表是一个指针数组,其元素是虚函数的指针,每个元素对应一个虚函数的函数指针。
虚表内的条目,即虚函数指针的赋值发生在编译器的编译阶段,也就是说在代码的编译阶段,虚表就可以构造出来了。

class A {
public:
    virtual void vfunc1();
    virtual void vfunc2();
    void func1();
    void func2();
private:
    int m_data1, m_data2;
};

class B : public A {
public:
    virtual void vfunc1();
    void func1();
private:
    int m_data3;
};

class C: public B {
public:
    virtual void vfunc2();
    void func2();
private:
    int m_data1, m_data4;
};

虚表是属于类的,而不是属于某个具体的对象,一个类只需要一个虚表即可。同一个类的所有对象都使用同一个虚表。
file
类A是基类,类B继承类A,类C又继承类B。类A,类B,类C,其对象模型如下图所示。
file

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部