64,646
社区成员
发帖
与我相关
我的任务
分享
int *pa;
int *pb;
class A
{
public:
virtual print()
{
pa=(int *)this;
cout<<"A::print:"<<pa<<" "<<*pa<<" "<<*((int *)(*pa))<<endl;
}
};
class B:public A
{
public:
virtual print()
{
pb=(int *)this;
cout<<"B::print:"<<pb<<" "<<*pb<<" "<<*((int *)(*pb))<<endl;
}
};
int main()
{
B b;
b.print();
A a;
a.print();
memcpy(&a,&b,sizeof(a));
a.print();
return 0;
}
int main()
{
B b;
b.print();//静态调用,相当于b.B::print();
A a;
a.print();//静态调用,相当于a.A::print();
memcpy(&a,&b,sizeof(a));//因VPTR一般是放在对象的头部,所以此处的a的VPTR指向B的虚表
a.print();//静态调用,相当于a.A::print();
b.print();//静态调用,相当于b.B::print();
A *p=&a;
p->print();//通过虚表调用,因a的vptr指向B的vtable,所以此处调用p->B::print();
return 0;
}
int main()
{
B b;
b.print();
A a;
a.print();
memcpy(&a,&b,sizeof(a));
a.print();
b.print();
A *p=&a;
p->print();
return 0;
}