一个C++类中如果有虚函数,那么这个类生成的对象中必然包含了一张虚表来存储这些虚函数的地址; 这个对象中的前4个字节必然是虚表的地址;
int *p = ((int*)*((int*)&obj));//得到虚表首地址
((void (*)()) ((int*) (*(p+0)) ))();//得到相应的虚函数,其中(void (*)())是你虚函数的指针类型
本文详细解释了C++中虚函数的工作原理及其实现机制。通过具体实例介绍了如何获取一个对象的虚表地址,并调用其虚函数。这对于理解C++面向对象特性非常关键。
一个C++类中如果有虚函数,那么这个类生成的对象中必然包含了一张虚表来存储这些虚函数的地址; 这个对象中的前4个字节必然是虚表的地址;
int *p = ((int*)*((int*)&obj));//得到虚表首地址
((void (*)()) ((int*) (*(p+0)) ))();//得到相应的虚函数,其中(void (*)())是你虚函数的指针类型
2221

被折叠的 条评论
为什么被折叠?