RTTI是运行阶段类型识别的简称,旨在为程序在运行阶段确定对象的类型提供一种标准方式。
- RTTI只适用于包含虚函数的类层次结构,因为只有对于这种类型的类层次结构,才应该将派生对象的地址赋给基类指针。
支持RTTI的元素:
1. dynamic_cast运算符:
- dynamic_cast可以在程序运行阶段检测类型转化是否安全。
- dynamic_cast使得能够在类层次结构中进行向上转换1,用于将派生类的指针转换为基类指针,其主要用途是确保可以安全地调用虚函数。
- 如果指向的对象(*pt)的类型为Type或从Type直接或间接派生而来的类型,则下面的表达式将指针pt转换为Type类型的指针:
dynamic_cast<Type *>(pt)
否则,结果为0,即空指针。
2. typeid运算符和type_info类
- typeid运算符返回一个对type-info对象的引用,其中type_info是在头文件typeinfo中定义的一个类。
- typeid运算符用来确定两个对象是否为同种类型。它可以接受两种参数:1. 类名;2. 对象名。
例如,如果pg指向的是一个A类对象,则下述表达式的结果为true,否则为false:
typeid(A)== typeid(*pg)
- type_info类包含一个name()成员函数,返回对象所属类的类名。