为什么要使用dynamic_cast

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(); 
}

 

posted @ 2020-05-27 23:55  心媛意码  阅读(811)  评论(0编辑  收藏  举报