码迷,mamicode.com
首页 > 其他好文 > 详细

为什么要使用dynamic_cast

时间:2020-05-28 01:13:23      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:else   转换   一个   strong   对象   code   bsp   rtu   目标   

1.dynamic_cast为什么要使用?
因为能够 安全地 将基类指针或引用转换为派生类的。
为何这样说呢?
因为如果被绑定的指针不是目标类型的话说dynamic_cast会失败,对于指针类型的转换,最佳实践是在条件中去执行,这样可以保证转换和结果测试在一个表达式中进行,从而不可能在测试转换前不经意地使用派生类指针。

举例:

if (Derived *pDerived = dynamic_cast<Derived *>pBase) //能够转换成功,说明pBase指向的是Derived类型的对象
{
    //使用pDerived指向的派生类对象
}
else//pBase指向的是Base类型的对象
{
    //使用pBase指向的基类对象
}

 

 2.什么时候可以使用dynamic_cast来代替虚函数?

技术图片

 

3.dynamic_cast使用的场景:

如果你必须做一个非多态的工作在继承类B和C上,但只能接收基类A,则需要如下的操作:

class A { public: virtual ~A(){} };

class B: public A
{ public: void work4B(){} };

class C: public A
{ public: void work4C(){} };

void non_polymorphic_work(A* ap)
{
  if (B* bp =dynamic_cast<B*>(ap))
    bp->work4B(); 
  if (C* cp =dynamic_cast<C*>(ap))
    cp->work4C(); 
}

 

为什么要使用dynamic_cast

标签:else   转换   一个   strong   对象   code   bsp   rtu   目标   

原文地址:https://www.cnblogs.com/Stephen-Qin/p/12820458.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!