typeid运算符

本文详细解释了C++中 typeid 的概念、使用方法及其在不同场景下的应用,包括基本类型、继承类中的类型信息以及多态中的类型识别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一看到typeid你先顾名思义下,觉得这会是个啥东东.首先type自然是说类型,比如int , long ,自定义类型等.而id嘛就是身份的唯一标志嘛,像你的身份证号一样.

C++刚开始的时候没有typeid这玩艺的,所以最初的MFC里面整出个叫RunTimeClass的宏来做这事,判断不同的变量的类型是否相同.到后面编译器支持该功能了,能简单的用运算符typeid来判断类型是否相同了.该功能又叫RTTI (run time type identification) 有时貌似又叫run time type information.我也不确定具体哪个合适

 

typeid和用法

假如有类class Arwen { } ;

             class Weiwen :public Arwen{ } ;

 

1.typeid(XXX).name()返回类型的文字信息

Arwen* pArwen = new Arwen;

Arwen arwen;

cout<<typeid( pArwen ).name()<<endl;//打印出class Arwen*

cout<<typeid( *pArwen ).name();  //打印出class Arwen

cout<<typeid( arwen ) ;  //打印出class Arwen

cout<< typeid (Arwen) ; //打印出class Arwen

 

2.继承类中的类型信息

比如上面的例子中.

Arwen* pArwen = new Arwen;

Arwen* pWeiwen = new Weiwen;

cout<< typeid( *pArwen).name();  //class Arwen

cout<<typeid( *pWeiwen).name();  //class Arwen

if( typeid( *pArwen) == typeid(*pWeiwen) )

cout<<" it is same type"<<endl; //输出该结果

else

cout<<"different type"<<endl;

上面的结果可能不是我们想要的.不过由于这里没有涉及到多态.所以typeid起的作用也不大.把之前的两个类改写下

 

3.多态中的类型信息

class Arwen { 

virtual void Fun() { }

};

class Weiwen :public Arwen{ } ;

 

此时唯一的不同是类中有个虚函数了.

Arwen* pArwen = new Arwen;

Arwen* pWeiwen = new Weiwen;

cout<< typeid( *pArwen).name(); //class Arwen

cout<<typeid( *pWeiwen).name(); //class Weiwen

if( typeid( *pArwen) == typeid(*pWeiwen) )

      cout<<" it is same type"<<endl;    

else

     cout<<"different type"<<endl; //输出该结果

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值