关于指针的显示转换问题.
如图 , 指向基类的之类指针~! 这里我做一个显示转换, 如果我用来 做 p->fun() 是安全的,
但是显示转换会带来太多的危险,这个危险是什么呢?
什么情况下才会发生呢?
这样会发生危险:
但是我们 平时用 dynamic_cast<>();的时候 是怎样用才不会发生错误呢??
还有如下问题:
[解决办法]
要看所要转换的指针是否真正的指向了基类
[解决办法]
上面的转换会失败,在不能确定转换会成功的场合,应该检查dynamic_cast的结果
比如
void dosomethingwith(Base * p)
{
Derived1 * t=dynamic_cast<Derived1*>(p);
if(t){
// fine, p points to a Derived1 or its derivative class object
// so we take some action accordingly
}
else if(dynamic_cast<Derived2*>(p))
{
// and take action accordingly
}
else if(dynamic_cast<Dervied3*>(p)
{
// take yet some other action
}else
// take default action
}