C++中的虚函数如何用


本篇内容主要讲解“C++中的虚函数如何用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++中的虚函数如何用”吧!虚函数调用属于运行时多态,在类的继承关系中,通过父类指针来调用不同子类免费云主机域名对象的同名方法,而产生不同的效果。C++ 中的多态是通过晚绑定(对象构造时)来实现的。用法在函数之前声明关键字virtual表示这是一个虚函数,在函数后增加一个= 0表示这是一个纯虚函数,纯虚函数的类不能创建具体实例。该示例作后文分析使用,一个包含纯虚函数的父类,一个重写了父类方法的子类,一个无继承的类。实现原来就了解虚函数是通过虚表的偏移来获取实际调用函数地址来实现的,但是在何时确定这个偏移和具体的偏移细节也没有说明,今儿个来探探究竟。拿上面的代码进行反汇编获提取部分函数,main,Base::Base(), Base::fuck(), Der::Der(), Der::fuck, A::funny() 如下:现在是一个纯虚函数,类中也没有虚析构函数,通过反汇编来看一些这个实现。_ZTV3Der_ZTV4Base是两个虚表,大小为 24, 8 字节对齐,分别对应 Der 子类和 Base 父类。虚表中偏移 16 字节(偏移大小可能和实现相关)为虚函数地址,每次构造函数的被调用的时候,会将该偏移地址存储到父类指针所在内存中,所以在上代码中看到,在 Base 和 Der 类的构函数中都出现了设置偏移地址的操作,但是子类构造函数会覆盖父类的修改。这样一来,实际的函数运行地址依赖构造函数,子类对象被构造就调用子类的方法,父类构造就调用父类的方法(非纯虚函数),实现了运行时多态。增加一个虚函数后, 后面的虚函数地址就添加到虚表之中,如下再调用另外一个虚函数就简单很多了,直接地址进行偏移(这里shit在fuck之后,所以+8)简单画了一下虚函数运行的内存结构图到此,相信大家对“C++中的虚函数如何用”有了更深的了解,不妨来实际操作一番吧!这里是百云主机网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

相关推荐: CSS3怎么实现无限循环的无缝滚动效果

这篇文章主要讲解了“CSS3怎么实现无限循环的无缝滚动效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“CSS3怎么实现无限循环的无缝滚动效果”吧!1. 使用CSS3来实现若要用CSS3的属性实现的话,非ani…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 04/18 18:39
下一篇 04/18 18:39

相关推荐