C++中的虚表(内存分布)

本文探讨了C++中的虚表概念,它是如何解决继承和虚函数重写问题的。虚表作为虚函数的地址存储,使得多态得以实现,即父类指针能调用子类的重写函数。文章通过单继承和多继承的对象模型来解释虚表的工作原理,并区分了静态多态(重载)和动态多态(虚函数)。
摘要由CSDN通过智能技术生成


什么是虚表?为什么要有虚表他在C++中的作用又是什么?

虚表就是虚函数表的简称,虚函数表是通过一块连续内存来存储虚函数的地址,这张表解决了继承,虚函数(重写)的问题。在有虚函数的对象实例中都存在一张虚函数表,虚函数表就像一张地图,指明了实际应用调用的虚函数。众所周知C++的继承和多态是相比于C的一大优势,而多态的实现和虚函数表密切相关。多态顾名思义就是“多种形态”,C++中虚函数的主要作用就是实现多态,简单说父类的指针/引用调用重写虚函数,当父类指针/引用指向父类对象时调用的是父类的虚函数,指向子类对象时调用的是子类的虚函数。接下来我们通过代码和图是的方法来进一步了解。

class Base
{
public:
	virtual void func1()
	{
		cout << "Base::fun1" << endl;
	}

	virtual void func2()
	{
		cout << "Base::fun2" << endl;
	}

private:
	int a;
};

单继承的对象模型

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值