- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:dynamic_castの必要性)
dynamic_castの必要性
このQ&Aのポイント
- dynamic_castの必要性がいまいち良く分かりません。必ずしも必要ないのかも、とも思います。
- ダイナミックキャストを用意する必要はないと思います。
- どなたかダイナミックキャストの必要性を教えていただけないでしょうか。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
(2)の部分は dp = &d; では、dynamic_cast との比較になっていませんが、 dp = (D*)bp; の間違いですかね? 別の型を経由しないとキャストの意味はないですし。 そうだという前提で話を進めますが、さらに、 class E : public B { public: void f(){count<< "ccc" << endl;} void g(){cout << "ddd" << endl;} }; といった感じで別の派生クラスがあったとします。 このとき、 E e; B *bp = &e; E *ep = (E*)bp; ep->g(); というコードは動作しますが、 D d; B *bp = &d; E *ep = (E*)bp; ep->g(); は、epが指す先がクラスEではないので、コンパイルは出来ますがまともに動作しません。 dynamic_cast は正しくキャスト可能かどうかチェックできますから、 bpが > E e; B *bp = &e; > D d; B *bp = &d; のどちらの場合でも E *ep = dynamic_cast<E *>(bp); if (ep != NULL) {ep->g();} というコードは問題なく動作します。 このように、派生したクラスを派生元クラスのポインタで管理しているときにはクラスチェックとして dynamic_cast が使えます。