为什么要使用dynamic_cast
Posted stephen-qin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么要使用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(); }
以上是关于为什么要使用dynamic_cast的主要内容,如果未能解决你的问题,请参考以下文章