您当前的位置:首页 > 计算机 > 编程开发 > C语言

C++虚函数表vtable

时间:01-03来源:作者:点击数:

通过前两节的介绍,想必各位读者都对多态有了一定的了解。这一节将会介绍多态的实现机制。

关于C++内部如何实现多态,对程序员来说即使不知道也完全没关系,但是如果你想加深对多态的理解,写出优秀的代码,那么这一节就具有重要的意义。

C++通过虚函数表(一般用 vtable 表示)来实现多态。

对于有虚函数的类,创建对象时会额外创建一个数组,数组中的每个元素都表示一个虚函数的地址。这个数组就是虚函数表。然后,将虚函数表的地址插入到对象的最前面。

请看下面的例子:

#include <iostream>
using namespace std;
class Base{
protected:
    int a;
    int b;
public:
    virtual void func1(){ cout<<"Base::func1"<<endl; }
    virtual void func2(){ cout<<"Base::func2"<<endl; }
    void func3(){ cout<<"Base::func3"<<endl; }
};
int main(){
    Base *p = new Base;
    p -> func1();
    p -> func2();
    p -> func3();
    return 0;
}

本例中定义了两个虚成员函数和一个普通成员函数,创建对象后,它们的内存布局如下所示:

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门