c++类继承问题
本帖最后由 zhoucantong 于 2012-11-04 18:39:12 编辑 SmartPhone sp (10000, 800, "android");
Phone* pp = &sp;
Camara* pc = &sp;
Computer* po = &sp;
printf ("%p,%p,%p,%p\n", &sp, pp, pc, po);//pp,pc,po地址不同,为什么?
pp = reinterpret_cast<Phone*> (&sp);
pc = reinterpret_cast<Camara*> (&sp);
po = reinterpret_cast<Computer*> (&sp);
printf ("%p,%p,%p,%p\n", &sp, pp, pc, po);//而这里pp,pc,po都是sp的地址,为什么?
(SmartPhone 继承Phone,Camara,Computer)
[解决办法]
这种转换,并不是赋值那么简单,
reinterpret_cast<>
dynamic_cast<>
这两个转换,实际上做了一个查找或者查找并检验的操作;
static_cast,const_cast 两个转换和C的转换差别不大。
[解决办法]
C++ 实际上无论哪种语言,多继承的实现都不是那么简单的,每个父类对象在子类对象内部的偏移量,是不同的。
所以要在原指针的基础上,加一个偏移量或者查一下表来定位,父类对象的位置,使得转换后的指针恰好指向父类对象,如果转换失败可能会抛出异常,或者把指针赋值为NULL;
[解决办法]