Loading

【侯捷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 @ 2024-01-30 21:17  rthete  阅读(20)  评论(0编辑  收藏  举报