C++冲刺(七)C++多态实现机制

13 篇文章 0 订阅

编译系统为每个包含虚函数的类包括它的子类都创建一个虚函数表,称为vftable,这是一个指针数组,存放每个虚函数的入口地址,供该类的所有对象共享。在每个类对象中放置称为vfptr的虚表指针,指向所属类的虚函数表。当通过指针调用虚函数时,编译器通过vfptr,在其所指的虚函数表中查找函数入口地址,从而实现动态多态性.

在多重继承下,如果派生类的多个基类含有虚函数,编译系统会为它创建多个虚函数表。该类的每个对象均含多个虚表指针


insight c++ object models:



总结:

1、每一个类都有虚表;

2、虚表可以继承,如果子类没有重新虚函数,那么子类虚表中仍然会有该函数的地址,只不过这个地址指向的是基类的虚函数实现。如果基类3个虚函数,那么基类的虚表中就有3项(虚函数的地址),派生类也会有虚表,至少有3项,如果重写了相应的虚函数,那么虚表的中的地址就会改变,指向自身的虚函数实现。如果派生类有自己的虚函数,那么虚函数表中就会添加该项。

3、派生类的虚表中虚函数的地址排列顺序和基类的虚表中虚函数地址排列顺序相同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值