Note_C++虚函数实现

 

 

C++虚函数实现机制笔记


注意:下面讨论的类均含虚函数。

 

每个(含虚函数)类都有一个虚表,表中的每一项都指向一个虚函数
同时,编译器为类添加一个指针vptr,vptr是指向虚表的虚指针。

 

程序实际运行虚函数时,先通过对象的虚指针找虚表,然后再找虚函数地址。

 

派生类继承父类的虚表、虚指针。若派生类的虚函数有变动,则虚表中相应项的地址指向派生类函数。

 

可以用sizeof()、&a,来观察内存结构。

 

类内存结构
先指向虚表的虚指针,然后成员变量。

 

总结

为了实现虚函数的动态绑定:
1、编译器底层为每个有虚函数的类引入一个虚函数表格(vtable)。
2、按类中声明的虚函数顺序依次向虚表存放虚函数地址。
3、编译器底层为每一个类对象附加一个指向虚表的虚指针(vptr)。

 

参考

C++中虚函数的实现机制
深度搜索C++对象模型

 

你可能感兴趣的:(C++,c,C#)