1.实验名称
1.虚函数的调用方式是和普通函数一样 还是通过虚表调用?
2.实验目的
探究不同情况下 虚函数的调用方法
3.实验环境
Vistual Studio2022 x86 Debug
4.实验方法
(1)通过控制变量(是否是虚函数 是否是指针/引用对象)进行对比
(2)通过汇编进行比较
完整代码
1.普通对象+成员函数
2.普通对象+虚函数
3.指针/引用对象+普通函数
4.指针/引用对象+虚函数
1 2我们可以看出 无论是否设计切片 普通对象无论是调用函数还是虚函数是一样的
3 4我们可以看出 无论是否涉及切片 指针/引用对象无论虚函数是否被重写 都会通过虚表指针访问虚表调用
2 4我们可以看出 只有指针对象才会通过虚表指针去得到虚函数地址去调用虚函数
5.实验结论
是否通过虚表指针访问虚表得到虚函数地址去调用虚函数 要满足以下条件:
(1)指针/引用对象
(2)调用的是虚函数