Если у вас было следующее:
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
и некоторых примеров, в которых это было бы полезно, я был бы очень признателен.