动态类型转换
使用 dynamic_cast<>()
作为函数,它可以帮助你通过继承层次结构进行转换。
如果你必须对某些派生类 B
和 C
做一些非多态的工作,但是收到了基础 class 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();
}