Недавно я рассмотрел вопрос дизайна OO на каком-то форуме и начал думать об использовании RTTI. Однако это должен быть плохой дизайн, но я не могу думать об альтернативе. Вот простой вопрос:
Создайте С++-программу для следующего сценария, используя концепции OO -
Моя собака, по имени Бадди, живет на заднем дворе. Он лает ночью, когда видит кошку или белку, которая пришла в гости. Если он видит лягушку, и он голоден, он ест ее. Если он видит лягушку, и он не голоден, он играет с ним. Если он уже съел 2 лягушек и все еще голоден, он отпустит его. Если он увидит койота, он плачет о помощи. Когда-то его друг Спот останавливается, и они преследуют друг друга. Если он видит любого другого животного, он просто наблюдает за ним. Я ожидал бы, что у вас будет класс животных, а также кошка, собака, белка, класс койот, который унаследует от класса животных.
Я начал думать о наличии метода see() в классе dog, который принимает аргумент Animal, а затем проверяет фактический тип объекта (frog, cat и т.д.) и принимает требуемые действия - играть, преследовать и т.д. в зависимости от фактический тип. Однако для этого потребуется RTTI, который должен быть плохим дизайном. Может ли кто-нибудь предложить лучший дизайн, который позволит избежать RTTI, а также указать на ошибку в моем мышлении?