![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| AndreyVN |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 25.6.2004 Где: Здесь, в Волгогра де Репутация: нет Всего: нет |
Привет, чтобы переписать процедурную программу мне нужно реализовать механизм, который я проиллюстрирую на примере:
есть класс TКот, как споектировать класс TКоты, чтобы ТХозяин мог по индексу i получал полноценный доступ к экземпляру класса i-го кота? Нашел половинчатое решение: в Котах создаем экземпляры всех котов:
1) Копируем в Ткоты секцию public из класса Ткот. 2) Переписываем все методы вот так
Все. Все методы неотличимы, можно наследоваться от ТКоты и работать так, как будто я работаю с одним котом. 3) Что-то похожее надо сделать с доступом к данным, не сооброжу как. Ну недавно я за ООП взялся, что поделаеш |
||||
|
|||||
| gray_k |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1015 Регистрация: 9.1.2003 Где: Москва Репутация: нет Всего: 22 |
Вот мой шаблон для хранения множества объектов:
Если реализация функций вызовет затруднения, обращайся. Это сообщение отредактировал(а) gray_k - 23.9.2004, 16:37 -------------------- С уважением. Gray. |
|||
|
||||
| AndreyVN |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 25.6.2004 Где: Здесь, в Волгогра де Репутация: нет Всего: нет |
Да нет, ребята вы задачу не поймете. Если бы надо было новую программу написать я бы что-то такое и сделал. Мне надо переписать старую программу.
Раньше группа функций работающих с котом (я буду в тех-же терминах объяснять) имела массив структур, индекс котрого выбирал параметры конкретного кота. Теперь, я свалил все это дело в класс Ткот, не разбираясь в коде, вместо массива структур сделал структуру и создал несколько экземпляров классов. Чтобы связать это с куском кода откуда происходит управление котами, надо в классе Коты сэмулировать работу одного Кота, а его выбор производить по индексу. Переписывать весь код никак не можно! |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Бестолковое занятие - напрямую переводить процедурный код - в объектно-ориентироавнный. ООП - это способ перевести работу в предметную область.
Если нельзя переписывать весь код и прежде всего иделогию построения задачи, незачем вообще заниматься ерундой. Оставь как есть. А ООП примени к следующей. Иначе и будут вылезать вопросы типа "коммутатор экземпляров класса" -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| Borisff2003 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 198 Регистрация: 26.2.2004 Где: г. Уфа Репутация: 1 Всего: 1 |
Да переопредели ты оператор [] и все!
Тебе же дали шаблон, добавь T& operator[](int index) { return *(elements[i]); } И работай так, как будто экземпляр Коты, это массив из котов Коты[i].ИмяФункцииИзКот(); Коты[i].ДанныеИзКот=0; и тд Почитай про коллекции! --------------------
Лень, двигатель прогресса |
|||
|
||||
| AndreyVN |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 25.6.2004 Где: Здесь, в Волгогра де Репутация: нет Всего: нет |
Спасибо конечно... Но такую конструкцию Коты[i].ДанныеИзКот необходимо прописать где-то в 15 файлах для 30 переменных. В моем варианте, Хозяин наследуется от Котов и имя функции остается доступным как и было ИмяФункцииИзКот(), то есть задача решена, хотя это и
Осталось как-то с данными разобраться, если не получится, переопределю оператор [], как Борис предлагает. |
||||
|
|||||
| gray_k |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1015 Регистрация: 9.1.2003 Где: Москва Репутация: нет Всего: 22 |
AndreyVN
У меня создалось впечатление, что Вы очень плохо разбираетесь в концепциях ООП. Советую сначала почитать общие принципы ООП, и в частности виды отношений между классами - зависимости, ассоциации, агрегации, композиции и обобщении. -------------------- С уважением. Gray. |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
А черт его знает, может в его предметной области Кот может быть владельцем других Котов и сществует такой зверь Кот - состоящий из кучи Котов. Похоже
AndreyVN уверен, что ООП - это что то вроде умственных изысков, придуманных как лекарство от безделья. -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| AndreyVN |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 25.6.2004 Где: Здесь, в Волгогра де Репутация: нет Всего: нет |
В общем, тема исчерпана, вариант решения придложен один, спасибо. А то, что с ООП я плохо знаком - честно предупредил в первом письме. |
||||
|
|||||
| gray_k |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1015 Регистрация: 9.1.2003 Где: Москва Репутация: нет Всего: 22 |
Так надо было кратко описать задачу и попросить совета в составлении объектной модели, а не задавать никому не понятные вопросы, ИМХО. -------------------- С уважением. Gray. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |