多态实现的机制(自我总结,可能不够准确,待完善)
发布日期:2021-05-09 00:20:48 浏览次数:40 分类:博客文章

本文共 354 字,大约阅读时间需要 1 分钟。

假如存在如下的类定义:

class Base{   virtual void VirtualFun(){} };class Derived : public Base{virtual void VirtualFun(){}};

对于Base *p = new Derived();来说,等号右边是创建子类的操作:

  它会先执行父类的构造函数,初始化虚表指针去指向父类的虚表,此时虚表中存放的是父类中的虚函数.

  然后再去执行子类的构造函数,初始化它的虚表指针,也就是父类的虚表指针,如果子类重写了父类的虚函数,则会在虚表对应的位置去覆盖父类原有的虚函数.

赋值给p的操作表示了,用p指向子类对象的起始位置.此时p->VirtualFun,即为p->vfptr->VirtualFun,指向了子类的虚函数.

上一篇:交互式SHELL和非交互式SHELL、登录SHELL和非登录SHELL的区别
下一篇:linux下同一个动态库名为何辣么多的.so文件

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2025年04月30日 12时38分33秒