【侯捷C++面向对象笔记】补充4-object model
关键词:虚函数表,动态绑定,多态
每个对象都维护自己的虚表指针,指向类的虚函数表。
(所以对象的size比其包含的所有数据size多4,即虚指针大小)
➡️动态绑定:(多态的实现原理)
- 通过指针p找到对象c的vptr
- 通过vptr找到class C的vtbl
- 在vtbl中找到第n个虚函数并调用
➡️子类调用父类函数隐式传入this指针:
myDoc.OnFileOpen();
看似是对象调用函数(静态绑定),但由于调用的是父类的函数CDocument::OnFileOpen()
,且其中嵌套了一个虚函数Serialize()
。- 在调用
Serialize()
时,实际是调用this->Seialize()
,而此时的this
为子类对象myDoc
。 - 即该过程其实为动态绑定,通过子类对象的vptr,找到class
CmyDoc
的虚表,调用重写的Serialize()
函数。
➡️静态绑定&动态绑定:
分类:
C++_Notes
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端