Если у вас было следующее:
class Animal{};
class Bird : public Animal{};
class Dog : public Animal{};
class Penguin : public Bird{};
class Poodle : public Dog{};
Только ли dynamic_cast проверяет, является ли один класс производным классом другого, или один класс является базовым классом другого? Так что, если бы у меня было:
Bird* bird;
Animal* animal;
bird = dynamic_cast<Animal*>(bird);
animal = dynamic_cast<Bird*>(animal);
bird теперь указывает на класс Animal, так что я могу использовать bird->some_function(); и это будет вызывать функцию в Animal? А animal теперь указывает на класс Bird, так что я могу сделать animal->some_function(); и это вызовет some_function(); в Bird?
Я пытался выяснить, как работает dynamic_cast, и ресурсы, которые я нашел в Интернете, были не самыми полезными. Если кто-то может предложить другое понимание функциональности dynamic_cast и некоторых примеров, в которых это было бы полезно, я был бы очень признателен.