, dynamic_cast , . , , dynamic_cast , . :
struct Base { virtual ~Base() { } };
struct Intermediate : Base { };
struct Derived : Intermediate { };
int main() {
Intermediate i;
Base* p_i = &i;
Derived d;
Base* p_d = &d;
assert(typeid(*p_i) == typeid(Intermediate));
assert(dynamic_cast<Intermediate*>(p_i));
assert(typeid(*p_d) == typeid(Intermediate));
assert(dynamic_cast<Intermediate*>(p_d));
}
(1) (2) , (3) , (4) . p_d Derived, type_id Derived, Intermediate. Derived Intermediate, dynamic_cast Derived Intermediate.
, , otherObject Frigate, SpaceShip, " ↔ ". , ; Frigate , .
, , , . ( ). , , , , .
, , , . , Base, (2) (4), undefined. (1) (3) , ; , typeid(*p_i) Base, Intermediate, .