dynamic_cast(C++ 型変換演算子)
カテゴリ
説明
次の式において:
dynamic_cast< T > (ptr)
T は、定義済みのクラス型を指すポインタか参照、または void* でなければなりません。 引数 ptr は、結果がポインタまたは参照となる式でなければなりません。
T が void* であれば、ptr もポインタでなければなりません。 この場合、結果のポインタによって、階層内の最も下位の派生要素であるクラスのどの要素にもアクセスできます。 このようなクラスは、他のクラスの基底クラスにはなりません。
派生クラスから基底クラスへ、またはある派生クラスから別の派生クラスへの変換は、次のように行われます。 T がポインタであり、ptr がクラス階層内の要素のうち基底クラス以外のクラスを指すポインタであれば、結果は 1 つのサブクラスを指すポインタになります。 参照の場合も同様です。 T が参照であり、ptr が基底クラス以外のクラスを指す参照であれば、結果は 1 つのサブクラスを指す参照になります。
基底クラスから派生クラスへの変換が行えるのは、基底クラスが多態型の場合だけです。
基底クラスへの変換は、コンパイル時に解決されます。 基底クラスから派生クラスへの変換および階層内の横の変換は、実行時に解決されます。
dynamic_cast<T> (ptr) が成功すると、ptr は指定した型に変換されます。 ポインタのキャストが失敗すると、返されるポインタの値は 0 になります。 参照型へのキャストが失敗すると、Bad_cast 例外が送出されます。
メモ: dynamic_cast には実行時型情報(RTTI)が必要です。