在由基类到子类转换的时候,为了判断子类的类型,可以用这个
class A{
};
class B : public A{
};
class C: public A{
};
如果你有一个A * p的指针,你想得到一个B类型的或者是C类型的指针
B * b = dynamic_cast<B*>(p);
若b为NULL,则p不是B类型的。

解决方案 »

  1.   

    RTTI是运行时的多态性,只在运行期间起作用。
    最典型的应用就是MFC中的RUNTIMECLASS机制,当需要由框架动态创建和管理窗口时这个机制才有效,比如文档-视图模型中,你只需要设置文档模板,文档类、MDI子窗口类、VIEW类将被框架来动态创建。
      

  2.   

    类函数调用触发多态时,才会有该类的RTTI类的信息(TI)是被添加到虚函数表中的某个slot的,
    而只有类声明了virtual函数或者其某个基类中有virtual函数,
    该类才会有虚函数表楼上的例子,类A的函数中,必须至少一个声明为virtual对于typeid的使用,也必须打开编译器的RTTI设置
    如:typeid(b) == typeid(B)
    判断对象b是否为于类B的对象