Я случайно использую полиморфизм для (потенциально) рекурсивного определения класса?

Я работаю над своей первой нетривиальной игрой на C ++ и уже несколько дней сражаюсь с причудливыми гейзенгами и тому подобным. Это совсем не весело для меня, потому что это не логично. (По крайней мере, не для меня, так как я совсем не хардкор, когда дело доходит до более эзотерических, низкоуровневых вещей.) Это очень расстраивает, потому что некоторые ошибки можно «исправить», поместив произвольные window.draw() или же std::cout звонки. Я думал, что проблема заключалась в свисающих указателях, и это все еще может быть, но я думаю, что прояснил их. Прямо сейчас проблема заключается в том, что сущности думают, что могут умереть, когда я касаюсь моей мыши в верхней части экрана, несмотря на то, что нет кода, который велел бы им это делать. (На самом деле, нет кода, удаленно связанного с положением мыши и y = 0.) Во всяком случае …

Я думаю, что я сузил проблему (или по крайней мере одну проблему) до одной строки кода, и я думаю, что могу исправить ошибку, немного изменив архитектуру. Но я хочу, чтобы это был опыт обучения, и я не знаю, почему это происходит. Вот что я считать происходит.

У меня есть суперкласс GameEntity с подклассом Soldier, который также является Launcher (который наследует из ничего). Я думаю, что это множественное наследование является частью проблемы, потому что класс Launcher имеет метод запуска с параметрами GameEntity. Таким образом, я думаю, что было бы возможно рекурсивно вызвать метод запуска, если GameEntity передал в метод является пусковая установка. Я только что понял, что это, вероятно, происходило в какой-то момент, так как игра зависала в методе запуска. По сути, я хочу знать, вызывает ли этот потенциал рекурсии из-за полиморфизма и множественного наследования странные проблемы, и почему. Пока я не знаю, что я делаю, я буду намного более консервативен с полиморфизмом и указателями.

Действительно, любые предложения будут очень полезны. Спасибо!

1

Решение

Похоже, у вас есть проблема с четким определением ответственности и сотрудничества ваших классов. Выбор наследования должен следовать из этих отношений, найденных в дизайне.

Вы можете добавить поле для целей отладки, launchable и проверьте, что ваш Launcher запускает только те вещи, которые можно запустить. Также проверьте, что ваш Launcher Сами объекты не запускаются. Как побочный эффект, это мешает вам запустить себя.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]