zoukankan      html  css  js  c++  java
  • 类型识别

    类型识别

     

     

     C++中如何得到动态类型?

    复制代码
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    class Base
    {
    public:
        virtual string type()
        {
            return "Base";
        }
    };
    
    class Derived : public Base
    {
    public:
        string type()
        {
            return "Derived";
        }
        
        void printf()
        {
            cout << "I'm a Derived." << endl;
        }
    };
    
    class Child : public Base
    {
    public:
        string type()
        {
            return "Child";
        }
    };
    
    void test(Base* b)
    {
        /* 危险的转换方式 */
        // Derived* d = static_cast<Derived*>(b);
        
        if( b->type() == "Derived" )
        {
            Derived* d = static_cast<Derived*>(b);
            
            d->printf();
        }
        
        // cout << dynamic_cast<Derived*>(b) << endl;
    }
    
    
    int main(int argc, char *argv[])
    {
        Base b;
        Derived d;
        Child c;
        
        test(&b);
        test(&d);
        test(&c);
        
        return 0;
    }
    复制代码

     

     

    复制代码
    #include <iostream>
    #include <string>
    #include <typeinfo>
    
    using namespace std;
    
    class Base
    {
    public:
        virtual ~Base()
        {
        }
    };
    
    class Derived : public Base
    {
    public:
        void printf()
        {
            cout << "I'm a Derived." << endl;
        }
    };
    
    void test(Base* b)
    {
        const type_info& tb = typeid(*b);
        
        cout << tb.name() << endl;
    }
    
    int main(int argc, char *argv[])
    {
        int i = 0;
        
        const type_info& tiv = typeid(i);
        const type_info& tii = typeid(int);
        
        cout << (tiv == tii) << endl;
        
        Base b;
        Derived d;
        
        test(&b);
        test(&d);
        
        return 0;
    }
    复制代码

     
  • 相关阅读:
    二叉树的非递归遍历
    关于vc变量定义顺序猜测
    单点登录详解(token简述)(七)
    session及cookie详解(七)
    dubbo(八)
    Zookeeper简介(九)
    拦截器与过滤器的区别(九)
    cookie详解(八)
    kafka可视化工具(二)
    Windows环境安装kafka(一)
  • 原文地址:https://www.cnblogs.com/bruce1992/p/14322428.html
Copyright © 2011-2022 走看看