「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

関連項目