C++のdynamic castの機能は何ですか?
dynamic_castは、動的キャストオペレーターから構成されるC++の型変換演算子で、実行時に継承関係内のポインタまたは参照の型変換に使用されます。dynamic_castは、基底クラスを指すポインタまたは参照を派生クラスを指すポインタまたは参照に変換できます。同様に、派生クラスを指すポインタまたは参照を、基底クラスを指すポインタまたは参照に変換できます。
動的キャストの主な機能は次のとおりです。
- 派生クラスへのポインタや参照への基本クラスポインタや参照の安全な変換に使用されます。変換が失敗した場合(つまり、基本クラスポインタや参照が派生クラスオブジェクトを参照していない場合)、dynamic_cast はNULLポインタ(ポインタの場合)を返し、または bad_cast 例外(参照の場合)をスローして、タイプ変換エラーを回避します。
- 実行時に对象的実際の型が指定の型かどうかの判定は、基底クラスへのポインタまたは参照を、派生クラスへのポインタまたは参照に変換し、変換結果がNULLポインタかどうかの検査で判定できます。
- 継承関係で下位(派生クラスから基底クラスへ)または上位(基底クラスから派生クラスへ)にキャストするために用いられ、オブジェクトの種類を切り替えたいときに使用される。
- 派生クラスの特定のメンバー関数を呼び出したり、派生クラスの特定のプロパティにアクセスできるように、コンテナに格納された基底クラスのポインタまたは参照を処理するために用いられるもので、派生クラスのポインタまたは参照に変換することで使用可能にする。
動的キャストは多態性をもつクラスしか使えないことに注意してください。つまり、基底クラスには少なくとも1つの仮想関数が必要です。さらに、動的キャストはポインタや参照の型の変換しか行えず、オブジェクト全体を変換することはできません。また、変換に失敗するとポインタの型によって動的キャストの振る舞いが変わります。ポインタの場合はヌルポインタが返り、参照の場合はbad_cast例外が発生します。