
多态实现的机制(自我总结,可能不够准确,待完善)
发布日期: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,指向了子类的虚函数.
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年04月30日 12时38分33秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
00010.02最基础客户信息管理软件(意义类的小项目,练习基础,不涉及数据库)
2019-03-12
00013.05 字符串比较
2019-03-12
Effective Java 读书笔记
2019-03-12
SpringBoot使用@Email报错误
2019-03-13
访问servlet时弹出文件下载框解决方法
2019-03-13
IDEA-@Slf4j和log标签&@Data(Lombok)无效
2019-03-13
Thymeleaf 生成下标,索引,使用Stat变量
2019-03-13
初始微服务---Springcloud发展【第一期】
2019-03-13
RAFT 拜占庭将军 共识算法
2019-03-13
UE4 错误列表 error码(只记录我遇到的情况,持续添加,未完成)
2019-03-13
Android 架构组件 – 让天下没有难做的 App
2019-03-13
能解决数据可视化大屏需求的3款可视化工具
2019-03-13
多代理区块链框架客户端的操作
2019-03-13
一些技术博客
2019-03-13
第01问:MySQL 一次 insert 刷几次盘?
2019-03-13
libvirtd:内部错误:Failed to apply firewall rule
2019-03-13
优先级队列2
2019-03-13
TiKV 源码解析系列文章(十三)MVCC 数据读取
2019-03-13