C++中typeid的用法

转载:https://blog.csdn.net/zkybeck_ck/article/details/51762541

 

typeid是C++的关键字之一,等同于sizeof这类的操作符。typeid操作符的返回结果是名为type_info的标准库类型的对象的引用

如果表达式的类型是类类型且至少包含有一个虚函数,则typeid操作符返回表达式的动态类型,需要在运行时计算;否则,typeid操作符返回表达式的静态类型,在编译时就可以计算。

  1. #define OUTPUT(f) cout << #f << "\t: " << typeid(f).name() << endl;

  2. class BaseA {};

  3. class DeriveA: public BaseA {};

  4.  
  5. class BaseB

  6. {

  7. virtual void f(){}

  8. };

  9. class DeriveB: public BaseB {};

  10.  
  11. int _tmain(int argc, _TCHAR* argv[])

  12. {

  13. cout << "-------直接处理类名-------" <<endl;

  14.  
  15. OUTPUT(BaseA);

  16. OUTPUT(DeriveA);

  17. OUTPUT(BaseB);

  18. OUTPUT(DeriveB);

  19.  
  20. cout << endl << "-------基类不含虚函数-------" <<endl;

  21.  
  22. BaseA baseA;

  23. DeriveA deriveA;

  24. OUTPUT(baseA);

  25. OUTPUT(deriveA);

  26.  
  27. BaseA* pa;

  28. pa = &baseA;

  29. OUTPUT(*pa);

  30. OUTPUT(pa);

  31. pa = &deriveA;

  32. OUTPUT(*pa);

  33. OUTPUT(pa);

  34.  
  35. cout << endl << "-------基类含有虚函数-------" <<endl;

  36.  
  37. BaseB baseB;

  38. DeriveB deriveB;

  39. OUTPUT(baseB);

  40. OUTPUT(deriveB);

  41.  
  42. BaseB* pb;

  43. pb = &baseB;

  44. OUTPUT(*pb);

  45. OUTPUT(pb);

  46. pb = &deriveB;

  47. OUTPUT(*pb);

  48. OUTPUT(pb);

  49. }

1.当typeid操作符的操作数是不带有虚函数的类类型时,typeid操作符会指出操作数的类型,而不是底层对象的类型。


2.如果typeid操作符的操作数是至少包含一个虚拟函数的类类型时,并且该表达式是一个基类的引用,则typeid操作符指出底层对象的派生类类型。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值