【侯捷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()函数。
➡️静态绑定&动态绑定:
| 对象调用函数 | 指针调用函数 |
|---|---|
| 静态绑定 | 动态绑定 |
| a.vfunc1(); | pa->vfunc1(); |
| a为一个class A对象,调用class A的成员函数 | pa为一个class A指针,接收一个class B对象,运行时通过指针调用虚函数 |
![]() |
![]() |



浙公网安备 33010602011771号