打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

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

#define OUTPUT(f)    cout << #f << "\t: " << typeid(f).name() << endl;
class BaseA {};
class DeriveA: public BaseA {};

class BaseB
{
    virtual void f(){}
};
class DeriveB: public BaseB {};

int _tmain(int argc, _TCHAR* argv[])
{
    cout << "-------直接处理类名-------" <<endl;

    OUTPUT(BaseA);
    OUTPUT(DeriveA);
    OUTPUT(BaseB);
    OUTPUT(DeriveB);

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

    BaseA baseA;
    DeriveA deriveA;
    OUTPUT(baseA);
    OUTPUT(deriveA);
    
    BaseA* pa;
    pa = &baseA;
    OUTPUT(*pa);
    OUTPUT(pa);
    pa = &deriveA;
    OUTPUT(*pa);
    OUTPUT(pa);

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

    BaseB baseB;
    DeriveB deriveB;
    OUTPUT(baseB);
    OUTPUT(deriveB);

    BaseB* pb;
    pb = &baseB;
    OUTPUT(*pb);
    OUTPUT(pb);
    pb = &deriveB;
    OUTPUT(*pb);
    OUTPUT(pb);
}


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

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
各类制作软件 工具下裁地址
提花衣
C 关键字typeid
c++ RTTI(运行时类型识别)
C++函数重定义、重载、重写
保暖披肩
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服