- 论坛徽章:
- 0
|
#include <iostream>
using namespace std;
class base{
public:
int a;
virtual void foo() {cout<<"base "<<a<<endl;}
};
class derived:public base{
public:
virtual void foo() {cout<<"derived "<<a<<endl;}
};
typedef void(*fun)();
int main(){
derived B;
base A,*pa;
B.a=2;
A.a=1;
printf("%x\n",*((int *)&A));
printf("%x\n",*((int *)&B));
pa=&B;
memcpy(&A,&B,sizeof(A));
A.foo();
fun pf=NULL;
int *vptr;
memcpy(&vptr,&A,4);
pf= (fun) *vptr;
pf();
system("pause");
return 0;
} |
dev-c++ 编译结果:
441c68
441c78
base 2
derived 4262624
我想把子类对象复制给父类对象 然后通过虚表指针的方式调用函数
对结果很疑惑
A.foo 不也是通过虚表指针访问到函数的吗
pf() 与 A.foo() 按理结果应该是一样的
为什么会产生不同的结果呢
希望高手指点一下 |
|