掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
多次元配列のソートについて (ID:58059)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
ちと長いけどサンプル: #include <iostream> #include <string> #include <exception> using std::cout; using std::endl; using std::string; using std::bad_cast; class Base { public: virtual ~Base(); }; class Derived : public Base { public: void Hoge(); }; int main() { char c = 'A'; char * pc = &c; const char * cpc = pc; // 常に安全 // プログラマには安全だとわかっている(元々 const でないものを元に戻しただけ)が、 // コンパイラにはわからないのでキャストが必要 char * pc2 = const_cast< char * >( cpc ); *pc2 = 'B'; // こういうことはコンパイルエラーにはならないが、 // 実行時エラーになる(元々 const)のでやってはいけない。 const char * cstr = "ABC"; char * str = const_cast< char * >( cstr ); *str = 'X'; Base b; Derived d; Base * pb = &d; // 常に安全 // プログラマには安全だとわかっている(元々 Derived * なのを元に戻しただけ)が、 // コンパイラにはわからないのでキャストが必要 Derived * pd = static_cast< Derived * >( pb ); pd->Hoge(); // こういうことはコンパイルエラーにはならないが、 // 実行時エラーになる(Base には Hoge がない)のでやってはいけない。 Derived * pd2 = static_cast< Derived * >( &b ); pd2->Hoge(); // プログラマには安全だとわかっている(元々 Derived * なのを元に戻しただけ)が、 // コンパイラにはわからないのでキャストが必要 Derived * pd3 = dynamic_cast< Derived * >( pb ); // dynamic_cast を使うと、より安全 // (元々変換不能なポインタを変換しようとすると、結果は NULL になる) Derived * pd4 = dynamic_cast< Derived * >( &b ); Base & rb = d; // 常に安全 // プログラマには安全だとわかっている(元々 Derived & なのを元に戻しただけ)が、 // コンパイラにはわからないのでキャストが必要 Derived & rd = static_cast< Derived & >( rb ); rd.Hoge(); // こういうことはコンパイルエラーにはならないが、 // 実行時エラーになる(Base には Hoge がない)のでやってはいけない。 Derived & rd2 = static_cast< Derived & >( b ); rd2.Hoge(); // プログラマには安全だとわかっている(元々 Derived & なのを元に戻しただけ)が、 // コンパイラにはわからないのでキャストが必要 Derived & rd3 = dynamic_cast< Derived & >( rb ); try { // dynamic_cast を使うと、より安全 // (元々変換不能な参照を変換しようとすると、例外を投げる) Derived & rd4 = dynamic_cast< Derived & >( b ); } catch( const bad_cast & ex ) { cout << ex.what() << endl; } return 0; }
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.