|
发表于 2020-1-6 07:30:01
|
显示全部楼层
#include <stdlib.h>
int main(int argc, char* argv[])
{
A *pa = new B();
pa->v = 1;
A c;
c.v = 2;
A &ra = *pa;
ra.f();
/*
unsigned char *p = (unsigned char*)pa;
unsigned char *q = (unsigned char*)&c;
for(int i=0; i<sizeof(c); i++)
p[i] = q[i];
*/
memcpy(pa, &c, sizeof(c));
ra.f();
delete pa;
return 0;
}
我想这样大概就使楼主称心了吧。
这除了偶尔娱乐娱乐外真的没有其它任何意义。原本分配的类B对象,后来将A类对象成员拷进去。不过这也正常,可以作为某种特殊的初始化。
但后面就不对了,把虚函数表指针也拷进去,结果就是在原本类B中的对象运行时转为类A对象(名副其实的运行时类型转换-_-!)。那么现在ra引用的是类A对象还是类B对象呢?
A a;
B b;
b = a;的真正意义在于:将父类对象a的父类域成员按字节拷贝给子类B对象(这里假设等号没有重载)。如果将虚函数指针也一起拷给b,那就等于失去作为类B的资格了,即与A同化了。
版主晨星说得不错啊。 |
|