• 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;
    }
    

    结果:

  • 相关阅读:
    致歉
    博客园上海俱乐部活动报道
    博客园手机版
    味道不错的NBearLite查询语法
    关于面向对象的讨论
    变形金刚皮肤
    准备在北京Tech·Ed上组织博客园聚会
    SVN&.NET
    博客园手机版功能更新
    最省时管理法:让你一天随意
  • 原文地址:https://www.cnblogs.com/stonemjl/p/12626537.html
Copyright © 2020-2023  润新知