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


    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.

  • 相关阅读:
    Hibernate优缺点
    Struts优缺点
    Problem M
    Problem K
    Problem K
    Problem Q
    Problem Q
    Problem F
    Problem F
    哈夫曼树
  • 原文地址:https://www.cnblogs.com/yrm1160029237/p/11627406.html
Copyright © 2020-2023  润新知