码迷,mamicode.com
首页 > 编程语言 > 详细

C++——运行时类型识别RTTI

时间:2019-10-06 16:36:33      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:++   运算符   程序   const   表达式   nbsp   运算   返回   程序员   

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类型
{}

 

C++——运行时类型识别RTTI

标签:++   运算符   程序   const   表达式   nbsp   运算   返回   程序员   

原文地址:https://www.cnblogs.com/yrm1160029237/p/11627406.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!