1.dynamic_cast
运算符
- 作用
将基类的指针、引用安全地转化为派生类的指针和引用。(下行转换) - 使用场合
我们拿到了一个基类的指针或引用,我们想执行某个派生类的操作但是该操作不是虚函数。 - 语法示例
Derived* dp = dynamic_cast<Derived*>(bp); //转换失败得到一个空指针
Derived& d = dynamic_cast<Derived&>(b); //转换失败会抛出一个bad_cast异常
2.typeid
运算符
typeid
运算符,返回的是typeinfo
或其派生类的常量引用。typeid
的运算对像应该是指针所指向的对象,而并非指针本身。- 如果
typeid
的运算对象不是一个类类型或者是不含有虚函数的类,那么就可以在编译阶段得到运算结果,否则是在运行时才求得结果。
typeid(*P)
如果指针所指的类不含有虚函数,那么p
可以不是一个有效的指针;
否则p
得是一个有效的指针,eg:如果p
是个空指针,那么typeid(*p)
抛出bad_typeinfo
异常。