#include <string>
#include <iostream>
//using namespace std;
using std::string;
using std::cout;
using std::endl;
class A
{
public:
A(){};
~A(){};
virtual void show1() { cout << "Ashow1" << endl; }
virtual void show2() { cout << "Ashow2" << endl; }
virtual void show3() { cout << "Ashow3" << endl; }
};
class B :public A
{
public:
B(){};
~B(){};
virtual void show1() { cout << "Bshow1" << endl; }
virtual void show2() { cout << "Bshow2" << endl; }
};
typedef void(*pfun)();
int _tmain(int argc, _TCHAR* argv[])
{
int len = sizeof(B);
B* pObj = new B;
pfun pf = NULL;
/*
(long*)bp,将对象的指针类型转换为(long*)类型,用于取出虚函数表的地址.
*(long*)bp,*为取出指针指向的值.此式子即虚函数表的地址,也就是第一个虚函数的地址.
(long*)*(long*)bp,将虚函数表的地址指针转换为(long*),用于后续迭代.
*(long*)*(long*)bp,*求指针值,即为第一个虚函数的地址,最后转换为pfun指针.
*/
for (int i = 0; i < 5;i++)
{
pf = (pfun)*((long*)*(long*)pObj + i);
if (pf != 0)
{
pf();
}
}
return 0;
}
C++取虚函数指针
最新推荐文章于 2025-09-18 17:00:20 发布
1287

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



