【侯捷C++面向对象笔记】补充4-object model

关键词:虚函数表,动态绑定,多态

每个对象都维护自己的虚表指针,指向类的虚函数表。

(所以对象的size比其包含的所有数据size多4,即虚指针大小)

➡️动态绑定:(多态的实现原理)

  1. 通过指针p找到对象c的vptr
  2. 通过vptr找到class C的vtbl
  3. 在vtbl中找到第n个虚函数并调用

➡️子类调用父类函数隐式传入this指针:

  1. myDoc.OnFileOpen();看似是对象调用函数(静态绑定),但由于调用的是父类的函数CDocument::OnFileOpen(),且其中嵌套了一个虚函数Serialize()
  2. 在调用Serialize()时,实际是调用this->Seialize(),而此时的this为子类对象myDoc
  3. 即该过程其实为动态绑定,通过子类对象的vptr,找到classCmyDoc的虚表,调用重写的Serialize()函数。

➡️静态绑定&动态绑定

对象调用函数 指针调用函数
静态绑定 动态绑定
a.vfunc1(); pa->vfunc1();
a为一个class A对象,调用class A的成员函数 pa为一个class A指针,接收一个class B对象,运行时通过指针调用虚函数
posted @   rthete  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
主题色彩
点击右上角即可分享
微信分享提示