父类子类类型转换问题
子类转换为父类是允许的 父类转换为子类可以通过强制类型转换,但是不管是哪种转换,最终转换的只是地址,并非对象的转换。
class animal
{
};
class cat:public animal
{
};
class tiger:public animal
{
};
void traslate(cat *c)//a是
{
animal *a = boost::dynamic_pointer_cast<animal>(c);//子类转为父类没有问题,但是a只能是一个指针或引用,不能是对象,实际上只是a指向了子类c的地址;
animal *a2 = c;//实际上子类转换为父类并不需要强制类型转换
cat *c1 = boost::dynamic_pointer_cast<animal>(a);//父类转换为子类,需要强转,并且转的也只能是指针或引用
tiger *ti = boost::dynamic_pointer_cast<tiger>(a);//父类转换为子类,需要强制类型转换,但是实际上没有意义,ti结果为NULL,因为a是一个子类cat转换而来的animal指针,a本质上指向的还是对象c,从代码的含义来说,兄弟类之间的转换没什么意义。
}
如果真的有从cat类转换为tiger的需要,可以改变一下继承关系,
class tiger:public cat
{
};