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

结果:

 

posted @ 2020-04-03 14:57  今天的小马同学  阅读(758)  评论(0编辑  收藏  举报