zoukankan      html  css  js  c++  java
  • C++ typeid动态判断基类指针指向的子类类型

    typeid是c++的关键字,typeid操作符的返回结果是名为type_info的标准库类型的对象的引用(在头文件typeinfo中定义)

    ISO C++标准并没有确切定义type_info,它的确切定义编译器相关的,但是标准却规定了其实现必需提供如下四种操作:

    type_info类提供了public虚 析构函数,以使用户能够用其作为基类。它的默认构造函数和拷贝构造函数及赋值操作符都定义为private,所以不能定义或复制type_info类型的对象。

    程序中创建type_info对象的唯一方法是使用typeid操作符(由此可见,如果把typeid看作函数的话,其应该是type_info的 友元)

    type_info的name成员函数返回C-style的字符串,用来表示相应的类型名,但务必注意这个返回的类型名与程序中使用的相应类型名并不一定一致,这具体由编译器的实现所决定的,标准只要求实现为每个类型返回唯一的字符串

    typeid 的参数可以使指针,可以使对象,可以是普通变量等。

    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    
    class Base
    {
    public:
    	virtual void printName() final
    	{
    		cout << typeid(*this).name() << endl;
    	}
    };
    
    class DerivedA : public Base
    {
    };
    
    class DerivedB : public Base
    {
    };
    
    int main()
    {
    	Base* a = new DerivedA();
    	Base* b = new DerivedB();
    
    	cout << typeid(*a).name() << endl;
    	cout << typeid(*b).name() << endl;
    
    	a->printName();
    	b->printName();
    
    	delete a;
    	delete b;
    
        return 0;
    }
    

    结果:

  • 相关阅读:
    线程执行器(一)
    修改锁的公平性
    Spark学习视频整合
    使用读写锁实现同步数据访问
    使用锁实现同步
    使用工厂类创建线程
    线程的分组
    android手机状态解释,比方android.os.Build.VERSION.SDK
    Android-Dalvik指令集
    selenium使用Xpath定位之完整篇
  • 原文地址:https://www.cnblogs.com/stonemjl/p/12626537.html
Copyright © 2011-2022 走看看