「dynamic cast」の版間の差分
提供: C++入門
(ページの作成:「C++のキャストで使われるdynamic_cast(動的なキャスト)は、安全にダウンキャストを行います。正しくないポインタを指定...」) |
(相違点なし)
|
2014年1月2日 (木) 21:16時点における最新版
C++のキャストで使われるdynamic_cast(動的なキャスト)は、安全にダウンキャストを行います。正しくないポインタを指定してダウンキャストしたとき、キャストの結果は NULL となります。参照を使用したダウンキャストが失敗した場合は、例外 std::bad_castが送出されます。
読み方
- dynamic_cast
- だいなみっく きゃすと
概要
BX *bxp = new BX(); BX *pd1 = dynamic_cast <BX *> (bxp); if (NULL == pd1) { cerr << "can not cast!" << endl; exit (EXIT_FAILURE); }
dynamic_cast.cc の例
ソースコード dynamic_cast.cc
#include <iostream> #include <cstdlib> #include <typeinfo> // std::bad_cast using namespace std; class B { public: virtual ~B(){} }; class BX : public B { }; int main (int argc, char *argv[]) { BX *bxp = new BX(); try { BX *pd1 = dynamic_cast <BX *> (bxp); if (NULL == pd1) { cerr << "can not down cast: BX* to BX*" << endl;; } } catch (const std::bad_cast& bc) { std::cerr << "bad cast: " << bc.what () << endl; exit (EXIT_FAILURE); } exit (EXIT_SUCCESS); }
コンパイル
g++ dynamic_cast.cc -o dynamic_cast
実行例
特に出力はありません。
% ./dynamic_cast
関連項目
- キャスト
- const_cast
- dynamic_cast
- reinterpret_cast
- static_cast
- std::static_pointer_cast
- std::const_pointer_cast
- std::dynamic_pointer_cast