yhzjut

我的微博:http://weibo.com/u/1864371954

常用链接

统计

最新评论

关于dynamic_cast的理解

template <class T>
T* DynamicCast(object* obj)
{
return obj&& obj->IsDerived(T::TYPE)?(T*)obj:0;
现在有class A, class B,class C

继承关系如下:
class A
{
}
class B:public A
{
}
class C:public B
{
}
DynamicCast的定义就是安全向下转换,我一开始认为一个基类的对象用dynamiccast转换到子类这样会是安全的;
如 A *a; B*b;    b=DynamicCast(a);这样转换b得到其实是0?其实这样才是真正做到安全,因为B*b只是指向B类的指针,它指向的内容是没有继承部分的,转换到B类,那就会出错。那么dynamiccast有什么用呢?
考虑下面这种情况

void cast(B* pkb)
{
     C* c = DynamicCast(pkb);
    //........
}


C* m_c;
//可能某个时候转换成了B
cast(m_c);这样调用的时候,函数内部用了dynamicCast保证,传进来虽然是B类型的,其实它是C类型的,但是某个时候转换成了B,因此这个指向B类的指针指向的内容其实也是有他的继承部分的,因此这样转换就没有问题。

posted on 2012-09-05 10:23 blinn 阅读(192) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理