クラスAとそれを継承する別のクラスBがあります。タイプAのオブジェクトをパラメーターとして受け入れる関数をオーバーライドしているので、Aを受け入れる必要があります。ただし、後でBだけが持つ関数を呼び出します。したがって、渡されたオブジェクトがタイプBでない場合は、falseを返し、続行しないようにします。
関数に渡されたオブジェクトがどのタイプであるかを知るための最良の方法は何ですか?
dynamic_castはトリックを行う必要があります
TYPE& dynamic_cast<TYPE&> (object);
TYPE* dynamic_cast<TYPE*> (object);
dynamic_cast
キーワードは、キャストの妥当性を確保するために、ランタイムチェックを行う、別のポインタまたは参照型からデータムをキャストします。
実際のオブジェクトの型ではない型へのポインタにキャストしようとすると、キャストの結果はNULLになります。実際のオブジェクトのタイプではないタイプを参照するようにキャストしようとすると、キャストはbad_cast
例外をスローします。
dynamic_castを機能させるには、Baseクラスに少なくとも1つの仮想関数があることを確認してください。
ウィキペディアのトピック実行時型情報
RTTIは、多態性のクラスでのみ使用できます。つまり、少なくとも1つの仮想メソッドがあります。実際には、これは制限ではありません。基本クラスには、派生クラスのオブジェクトが基本ポインターから削除された場合に適切なクリーンアップを実行できるようにするための仮想デストラクタが必要です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加