RTTI只适用于包含虚函数的类。因为RTTI是以虚函数表(vptr)为基础实现的,而且只要存在派生,则基类的析构函数必然是虚函数,因此这一点不必深究。
1. dynamic_cast操作符:意在“是否可以安全转化”

如果classD是派生,classB是基类,则可以安全转化,得到指针;反之,指针为NULL。

















































dynamic_cast可用于“引用”的转化,请求不正确时,会引发类型为bad_cast的异常。









2. typeid操作符和type_info类
typeid接受两种参数:类和对象,type_info是typeid的返回值类型,type_info重载了“==”和“!=”,可以直接进行比较。如下:

type_info有const char* name()成员函数,用来返回一个字符串——类名称。







3. RTTI的误用



















以上不妥,因为派生新的类时,还需要更改。这种在if...else中使用typeid的情况,应该考虑使用虚函数和dynamic_cast。
4. 其它类型转化函数
const_cast 把const类型指针转换为非const指针,但只能在同一派生层次转换。且不能改变指针指向的const常量。使用格式:



static_cast 可以用于upcast和downcast转化,但是不能进行不相关类的转化。
reinterpret_cast 可进行内存级的转化,如下:



