动态类型转换

使用 dynamic_cast<>() 作为函数,它可以帮助你通过继承层次结构进行转换。

如果你必须对某些派生类 BC 做一些非多态的工作,但是收到了基础 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(); 
}