c++父类指针和子类指针相转换
Class A{int a;};
Class B{int b};
Class C:public A,public B;
1.
C c;
当父类指针指向子类指针如:B* b= &c;
b的值是c的值偏移后的A类的大小字节之后的值,例如:
&c=00B9FBB0;则b=(&c)+sizeof(A)即例中b=00B9FBB4;
2.
当1中对b再转换成c时
如 C* c_pr=(C*)b,或者C* c_pr=dynamic_cast<C*>(b);
则c_ptr=00B9FBB0;又偏移回去了
3.
接着测试;
若定义B b;
C* c=(C*)&b;
则&b=c=00B9FBA4;
此时c地址不会便宜,对c进行成员操作的话会导致越界。