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.

05-11 11:18