Реализация стратегии на классах

Тема в разделе "Общие вопросы по С и С++", создана пользователем mahsus, 28 дек 2007.

Наш партнер Genesis Hackspace
  1. mahsus

    mahsus Гость

    Добрый день!
    Помогите начинающему. Пишу реализацию игры "Генералы" на классах. Написал класс Military, от которого наследовал классы:
    BuildItem - что-то строит; MilitItem - во что-то стреляет;
    Для MilitItem определил ф-цию Fire() и цель Military *Purpose;
    Для BuildItem определил ф-цию Build() и цель Military *Purpose;
    От класса MilitItem наследую: классы Пехота, Танк, Ракетница, Самолет - стреляют по всем объектам Military;
    От класса BuildItem наследую: классы
    Барак - "строит" объект класса пехота;
    Военный завод - "строит" объект класса Танк, Ракетницу;
    Аэродром - "строит" объект класса самолет ;
    Подскажите прийом как мне указать, возьмем один пример, что Военный завод может строить только Танк и Ракетницу, унаследованные от класса MilitUnit, когда есть другие классы (пехота, самолет) тоже унаследованные от того же класса MilitUnit?
    Как это делается?
    И, следовательно вопрос второй следует из первого:
    Например, объект класса "Военный завод" может строить объекты "Танк" и "Ракетница". Есть ф-ция Build(), которая строит переданный объект,т.е. создает. Пустые скобки означают, что я не знаю что за параметр передавать функции, чтобы она создала например объект класса "танк" (... = new ...;). Как передать тип объекта, который нужно создать.
    Подскажите пожалуйста механизм такой обработки.
    Буду очень благодарен за ответ.
     
  2. grigsoft

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    Ну можно RTTI использовать. Но он не всеми компиляторами нормально поддерживается. В MFC смотреть на CRuntimeClass.
    Я бы добавил метод GetStructuresNumber() - вернет число поддерживаемых структур. Отдавать объект тогда по индексу. Но учитывая возможные потребности информации о создаваемом объекте, можно сделать промежуточный класс СStructureFactory <- CTankFactory который будет собственно создавать нужный объект и отдавать нужную информацию о нем. Build будет возвращать СStructureFactory.
     
Загрузка...

Поделиться этой страницей