- 論壇徽章:
- 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++ 編譯結(jié)果:
441c68
441c78
base 2
derived 4262624
我想把子類對象復制給父類對象 然后通過虛表指針的方式調(diào)用函數(shù)
對結(jié)果很疑惑
A.foo 不也是通過虛表指針訪問到函數(shù)的嗎
pf() 與 A.foo() 按理結(jié)果應該是一樣的
為什么會產(chǎn)生不同的結(jié)果呢
希望高手指點一下 |
|