1.实现方式
- typeid运算符,返回表达式的类型
- dynamic_cast运算符,基类的指针或引用安全地转换成派生类的指针或引用
2.适用于:使用基类的指针或引用执行派生类的操作,且该操作不是虚函数。
3.使用风险:程序员必须清楚地知道转换的目标类型,且必须检查类型转换是否被成功执行。尽可能用虚函数
3.1 指针类型
if (Derived *dp =dynamic_cast<Derived*>(bp))//将Base类型的bp转化为Derived类型的dp,安全 { //dp指向Derived对象 }else{ //bp指向Base对象 }
3.2 引用类型
void f(const Base& b) { try{ const Derived& d=dynamic_cast<const Derived&> (b) } catch (bad_cast) { //转换失败 } }
4.typeid:作用于对象,而非其他(比如应该判断*bp是否为Derived,而不是判断bp是否Derived)
Derived *dp=new Derived; Base *bp=dp; if (typeid(*bp)==typeid(*dp))//是否同一个类型 {} if (typeid(*bp)==typeid(Derived))//*bp是否是Derived类型 {}
5.