typeid().name()を使うと実行時型情報が得られる思うのですが自分がやりたいことは型を実行中にキャストしたときのその時の型リアルタイム?
の型情報が欲しいのですがどうすれがいいのでしょうか?
p = dynamic_cast<derived*>(p);
上のコードを実行するとpの型がderived型キャストするはずなので
typeid().name()ではderived型と表示されるはずですか?実行時型情報なのでbase*と表示されてしまいますどうすればいいのか教えてくれますでしょうか?
class base { public: base() { cout << "base コンストラクタ\n"; } virtual ~base() { cout << "~base デストラクタ\n"; } void bfun() { cout << "基底関数\n"; } void tf() { cout << "基底クラス tf()\n"; } virtual void vf() { cout << "仮想基底f\n"; }; }; class derived : public base { public: derived():base() { cout << "derived コンストラクタ\n"; } ~derived() { cout << "~derived デストラクタ\n"; } void tf() { cout << "派生クラス tf()\n"; } void dfun() { cout << "派生関数\n"; } virtual void vf() { cout << "仮想派生f\n"; } }; int main() { derived* x = new derived(); cout << typeid(x).name()<<endl; dynamic_cast<base*>(x); cout << typeid(x).name()<<endl; printf("\n\n\n"); base* p = new derived(); p->tf(); cout << typeid(p).name() << endl; //p = (derived*)p; p = dynamic_cast<derived*>(p); cout << typeid(p).name() << endl; delete p; cout << typeid(p).name()<<endl; p = new base(); p->tf(); cout<<typeid(p).name()<<endl; //derived* x = new base(); int _r = _getch(); return 0; }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。