// vcTest.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
class A
{
public:
void virtual fun1()
{
printf("this:%d A::fun1/n",this);
}
};
class B
{
public:
void virtual fun1()
{
printf("this:%d B::fun1/n",this);
}
};
class C:public A,public B
{
public:
int val;
void virtual fun1()
{
printf("this:%d C::fun1/n",this);
printf("value=%d/n",val);
}
};
typedef void (* fun)();
int _tmain(int argc, _TCHAR* argv[])
{
C * pC=new C();
pC->val=100;
printf("调用pC->fun1/n");
pC->fun1();
A * pA=pC;
printf("调用pA->fun1/n");
pA->fun1();
B * pB=pC;
printf("调用pB->fun1/n");
pB->fun1();
printf("pC的值:%d/n",pC);
printf("sizeof(C)=%d/n",sizeof(C));
printf("第一个虚函数/n");
fun ff=(fun)(int *)*(int *)*(int *)pC;
ff();
printf("第二个虚函数/n");
fun ff2=(fun)(int *)*(int *)*((int *)pC+1);
ff2();
getchar();
delete pC;
pC=0;
return 0;
}
这个是我写的测试程序
下面是结果:
调用pC->fun1
this:3814856 C::fun1
value=100
调用pA->fun1
this:3814856 C::fun1
value=100
调用pB->fun1
this:3814856 C::fun1
value=100
pC的值:3814856
sizeof(C)=12
第一个虚函数
this:4282040 C::fun1
value=0
第二个虚函数
this:4282012 C::fun1
value=-1009518667
发现当我使用正常的多态调用的时候this指针时可以正确的指向实例对象,但当我使用虚函数表中的虚函数地址来调用的时候
这个this指针就完全不知道指到那里去了,而且相应的成员变量的指向也完全不知道到哪里去了。