私は思っていることがいくつかあります。
クラスBがクラスAから派生したとき、以下が成り立つ:
- Bあなたはポインタを保持している場合はA
- Aは必ずしもB
ではありませんBへのdynamic_castを試みることによって、BのA部分であるかどうかを確認することができます。そのキャストが成功するのは、実際にBのAインターフェースを指していたからです。キャストが成功しない場合、あなたはを指したA-ようなものだから実際B.
ませんでした:
struct A {
virtual ~A();
}; // a base class
struct B : A {}; // a B is an A but an A is not necessarily a B
A* pa = new A;
// pa is pointing to an A
B* pb = dynamic_cast<B*>(pa);
// pb will now be NULL because this cast will have failed.
// Remember, a B *is an* A, but an A *is not necessarily a* B
delete pa;
// try again...
pa = new B;
// pa points to the A-part of a B, so
pb = dynamic_cast<B*>(pa);
// pb now points to the same object, but has access to all the methods on the B interface
delete pb;
// clean up
あなたが「広い」タイプに「小さい」タイプからキャストしようとしている、それは私がより良いアナロジーを提供することができます –