虚基表,虚函数表,打印虚函数表

虚基表是在继承里面提到的概念 它存在的意义或者是目的是用来解决数据冗余和数据二义性的价值,在继承里面 尤其是菱形继承里面 从不同路径下继承而来的同一基类,会在子类里面有多份拷贝,将会存在两个问题 数据冗余和二义性的问题 当然如果是非要修改继承而来的值加上作用域也是可以实现的,在虚基表中存放的到虚基类的偏移量,虚基表也是以NULL结尾。

虚函数表有时候也称之为虚表 首先这个虚函数表他是存在哪里的呢 存在常量区的C++中的虚函数的实现一般是通过虚函数表(Virtual Table)来实现的。简称为V-Table。 这张表解决了继承、覆盖的问题,指明了实际所应该调用的函数。虚表可以看做一个指针数组,存放的是所有虚函数的指针,它以NULL来作为虚表的结束标志。

下面通过代码打印一下虚表

#include<iostream>
using namespace std;

class Person {
public:
	Person()
	{
		cout << "Person_gou_zao" << endl;
	}
	virtual void Fun1()//final
	{}
	virtual void Fun2()//final
	{}
private:
	int _a = 0;
};
class Student:public Person {

public:
	Student()
	{
		cout << "Student_gou_zao" << endl;
	}
	virtual void Fun1()override
	{
		cout << "Fun1" << endl;
	}
	virtual void Fun2()override
	{
		cout << "Fun2" << endl;
	}
private:
	int _id = 0;
};
typedef void(*VFP)();
void PrintVFTable(VFP a[])
{
	int i = 0;
	for (i = 0; a[i]; ++i)
	{
		cout << a[i] << endl;
		a[i]();

	}

}
int main()
{
	Student stu;
	PrintVFTable((VFP*)*(void**)&stu);


	system("pause");
	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值