C++学习一虚函数的实现方式

在基类的成员函数中如果有使用virtual关键字修饰的函数,实例化时就会产生一张对应这个类的对象的虚函数表,而这个函数本来应该是函数入口的,而现在变成了虚函数表的入口地址。然后通过虚函数表内找到函数的地址。

比如有这样两个类

class Base {
public:
	virtual int fun() {
		return 0;
	}
};
class BaseSon:public Base {
};
其中:

Base这个基类的fun函数是虚函数,实例化后,在这里存在的函数指针地址会被存到这个对象对应的一个虚函数表中,而这里的地址被换成了虚函数表地址。

Baseson继承的Base的fun函数,但是也是存在一个虚函数表(这张表和上面那张不是同一张),同样里面有Base的fun函数的函数地址(入口地址)。而且重点是,这个地址在这两张表中的相对位置相同,也就是偏移量相同。

class Base {
public:
	virtual int fun() {
		return 0;
	}
};
class BaseSon:public Base {
public:
	virtual int fun(){
		return 1;
	}
};
在这种情况中,这里Base类和上面一致。但是BaseSon类的虚函数表内的那个地址被换成了BaseSon自己的那个return1的fun函数的入口地址。

所以,可以通过使用基类的指针来访问派生类的fun函数,这样就可以实现动态多态,同一个命令对不同对象使用时,实现不同的功能。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值