Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2012, 21:23   #1
denrubun
Пользователь
 
Регистрация: 24.12.2012
Сообщений: 82
По умолчанию вопрос по наследованию

Доброго времени суток. столкнулся с такой проблемой:
имеются вот такие классы:
карта, состоящая из клеток и
карта для бота, состоящая из клеток, оснащенных их ценностью(приоритетом) чтобы бот определял куда ему ходить

Код:
class field{
  char v;
};

class map{
  field f[20][20];
};

class botfield:public field{
  short prior;
};

class botmap:public map{
  botfield f[20][20];
};
при этом получается, что botmap включает в себя целых 2 поля: ботское и обычное
Собственно как от этого избавиться?
denrubun вне форума Ответить с цитированием
Старый 24.12.2012, 21:26   #2
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

сделай структуру botfield отдельно саму по себе, без наследования. Она будет содержать только данные бота
Rififi вне форума Ответить с цитированием
Старый 24.12.2012, 21:28   #3
denrubun
Пользователь
 
Регистрация: 24.12.2012
Сообщений: 82
По умолчанию

т.е. в botmap будет два массива один отдельно клеток, а другой отдельно ценностей?
denrubun вне форума Ответить с цитированием
Старый 24.12.2012, 21:30   #4
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

да.
А вообще, так как ты хочешь, с public полями задача напрямую не решается. данные по любому будут размножаться, либо работать с ними будет неудобно
для этого придумали инкапсуляцию и полиморфизм
Rififi вне форума Ответить с цитированием
Старый 24.12.2012, 21:36   #5
denrubun
Пользователь
 
Регистрация: 24.12.2012
Сообщений: 82
По умолчанию

я хочу чтобы botmap умел все то же, что и map + пару операций для которых нужны клетки с приоритетом. при этом botfield тоже обладают способностями field. но если объявить botmap не наследником, то весь функционал потеряется
denrubun вне форума Ответить с цитированием
Старый 24.12.2012, 21:40   #6
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

делай через виртуальные функции
Rififi вне форума Ответить с цитированием
Старый 24.12.2012, 22:03   #7
denrubun
Пользователь
 
Регистрация: 24.12.2012
Сообщений: 82
По умолчанию

совсем не знаю виртуальных функций(
и как функции мне помогут не унаследовать обычное поле от map
denrubun вне форума Ответить с цитированием
Старый 24.12.2012, 22:52   #8
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

наследуйтесь от map и заведите еще массив приоритетов дополнительно, как вариант
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 24.12.2012, 23:50   #9
denrubun
Пользователь
 
Регистрация: 24.12.2012
Сообщений: 82
По умолчанию

спасибо, но хотелось бы сделать красиво...
пока что просто удалил botmap, а в map переправил field на botfield, но вопрос по прежнему актуален
denrubun вне форума Ответить с цитированием
Старый 25.12.2012, 01:45   #10
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

Не знаю насколько красиво будет, но есть еще вариант:
Код:
class Field 
{
  char v;
};

class BotField : public Field
{
  short prior;
};

template<class T>
class Map
{
  T f[20][20];
};

template<class T>
class BotMap : public Map<T>
{
};
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
альтернатива множественному наследованию the_deer_one C# (си шарп) 1 10.10.2012 10:08
Вопрос по множественному наследованию классов с++ GartesK Общие вопросы C/C++ 7 14.11.2011 22:00
задача по наследованию в С++ Евгений1221 Помощь студентам 1 12.05.2011 01:13
Вопрос по наследованию katbka Помощь студентам 0 13.05.2010 18:31