型変換
ダウンキャストはアップキャストの逆で、基底クラスから派生クラスへの型変換、すなわちBaseのインスタンスをDerivedに変換する操作である。Baseのインスタンスは必ずしもDerivedのインスタンスとは限らないので、この変換は一般に安全ではなく、エラーが発生する可能性がある。そのため、多くの言語ではキャスト構文による明示的な変換の記述が必要である。通例、オブジェクト指向プログラミングではポリモーフィズムを使うべきであり、ダウンキャストおよびクロスキャストが必要になるということはプログラムの設計に問題があることを示唆している。
C++では、安全なダウンキャストのためにdynamic_castという特別な構文が用意されている。この構文では、実行時型情報を参照し、ポインタ間の変換が失敗すると結果としてnullptrが返る。参照間の変換が失敗するとstd::bad_cast例外がスローされる。dynamic_castを使用するためには、型に仮想関数テーブルが必要となる。つまり、基底クラスに少なくとも1つの仮想関数を持つ必要がある。確実に成功することが分かっているダウンキャストの場合はstatic_castで代用でき、これはdynamic_castよりも実行時コストが小さくなるが、失敗する可能性のある場合には使えない。