《085》typeid演算子


 typeid演算子

 typeid演算子は、実行時に型が決定する多相的オブジェクトの、
実行時型情報 RTTI(Run-Time Type Information)を取得できる演算子です。
多相的クラス型のオブジェクトを typeid演算子のオペランドに与えると、
実行時に決定された型を表現する const type_info型クラスオブジェクトへの参照が返されます

 例えば、多相的クラスオブジェクト x が実行時において D型であるような場合、
   std::cout << typeid(x).name();
と記述した場合には、
「 class D 」 と出力されます。

ここで、関数 name は、type_infoクラスのメンバ関数です。
・typeid関数の返却値は const type_info&
・name関数の返却値は const char*

したがって、
   std::cout << typeid(x).name();
は、例えば、
   const type_info& ref = typeid(x);
   std::cout << ref.name() << '\n';
あるいは、
   const type_info* ptr = &typeid(x);
   std::cout << ptr->name();
と同じ意味です。

#include <iostream>

class Aaa {
    virtual void f() const { };
};

class Bbb : public Aaa {
    void f() const { };
};

int main() {
    Bbb obj_b;
    Aaa& ref = obj_b;
    Aaa* ptr = &obj_b;

    std::cout << typeid(ref).name() << '\n';
    std::cout << typeid(*ptr).name() << '\n';

    const type_info& r = typeid(obj_b);
    std::cout << r.name() << '\n';

    const type_info* p = &typeid(obj_b);
    std::cout << p->name() << '\n';
}

fca05_0009.png

2018-04-14 00:22 : 未分類 : コメント : 0 :
コメントの投稿
非公開コメント

« next  ホーム  prev »

検索フォーム

こうすけ kousuke_cpp@outlook.jp

スポンサーリンク

新版 明解C 中級編 (明解シリーズ)

新品価格
¥2,916から
(2018/3/24 23:58時点)