C++之虚函数表

  • 一、概念

虚函数表是一个存在指向虚函数的指针数组,每一个带有虚函数的类都有一个虚函数表。虚函数表与虚函数一样是可以继承。这个表的每一个数组的值都是指向虚函数的指针。

二、虚函数表如何继承与重写

1、一个类继承另外一个带有虚函数的类,并且没有重写和增加虚函数。这个类的虚函数表就和父类一样。

2、当派生类重写了父类的虚函数,则派生类继承父类虚函数表的基础写,对重写的函数对应的数组进行修改。也就是把这个值修改成指向派生类的函数地址。

3、派生类新增了虚函数,则就在虚函数表的末尾增加。

  • 三、虚函数表的作用

虚函数表可以支持动态动态,允许基类的指针或引用调用派生类的函数。

例子:

class Base{

public:

    virtual void test() { std::cout << "Base::virtual function" << std::endl; }

};

class Derived : public Base {

public:

    void test() override { std::cout << "Derived::virtual function" << std::endl; }

public:

    void testAdd()  { std::cout << "Derived::testAdd()" << std::endl; }

    virtual void testAddVi() { std::cout << "Derived::testAddVi()" << std::endl; }

};

int main()

{

    Base* obj = new Derived();

    obj->test();  //

    //只能调用基类继承下来的函数

    //obj->testAdd();//不能调用派生类增加的其它函数

    //obj->testAddVi();//同样不能调用派生类新加的虚函数

    //定义派生类重新指向

    Derived* de= dynamic_cast<Derived*>(obj);

    de->testAdd();

    de->testAddVi();

    delete obj;

    getchar();

    return 0;

}

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值