Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Клммутатор экземпляров классов, ООП 
:(
    Опции темы
AndreyVN
Дата 23.9.2004, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 25.6.2004
Где: Здесь, в Волгогра де

Репутация: нет
Всего: нет



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

есть класс TКот, как споектировать класс TКоты, чтобы ТХозяин мог по индексу i получал полноценный доступ к экземпляру класса i-го кота?

Нашел половинчатое решение:
в Котах создаем экземпляры всех котов:
Код
for(int i=0; i<6; i++) Кот[i]= new TКот;

1) Копируем в Ткоты секцию public из класса Ткот.
2) Переписываем все методы вот так
Код
Ткоты::КакаятоФункция(  ...  )
{ Кот[Num]->КакаятоФункция(  ...  ); }


Все. Все методы неотличимы, можно наследоваться от ТКоты и работать так, как будто я работаю с одним котом.
3) Что-то похожее надо сделать с доступом к данным, не сооброжу как.
Ну недавно я за ООП взялся, что поделаеш sad.gif
PM   Вверх
gray_k
Дата 23.9.2004, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1015
Регистрация: 9.1.2003
Где: Москва

Репутация: нет
Всего: 22



Вот мой шаблон для хранения множества объектов:
Код
//шаблон класса - массива элеметов
template <class T> class ArrayOfPointers
{
protected:
 ArrayOfPointers();
 virtual void f()=0;
 static T** elements;
 static int count;
public:
 static T** getElements();

 static T* getElement( int index );

 static T* getElementByNum( int num );

 static int getCount();

 static void insert( T* element );

 static void remove( int index );

 static void removeByNum( int num );

 static void erase();

};
template <class T> T** ArrayOfPointers<T>::elements = NULL;
template <class T> int ArrayOfPointers<T>::count = 0;

Если реализация функций вызовет затруднения, обращайся.

Это сообщение отредактировал(а) gray_k - 23.9.2004, 16:37


--------------------
С уважением.
Gray.
PM MAIL   Вверх
AndreyVN
Дата 23.9.2004, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 25.6.2004
Где: Здесь, в Волгогра де

Репутация: нет
Всего: нет



Да нет, ребята вы задачу не поймете. Если бы надо было новую программу написать я бы что-то такое и сделал. Мне надо переписать старую программу.

Раньше группа функций работающих с котом (я буду в тех-же терминах объяснять) имела массив структур, индекс котрого выбирал параметры конкретного кота.

Теперь, я свалил все это дело в класс Ткот, не разбираясь в коде, вместо массива структур сделал структуру и создал несколько экземпляров классов. Чтобы связать это с куском кода откуда происходит управление котами, надо в классе Коты сэмулировать работу одного Кота, а его выбор производить по индексу.
Переписывать весь код никак не можно!

PM   Вверх
Vyacheslav
Дата 23.9.2004, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Бестолковое занятие - напрямую переводить процедурный код - в объектно-ориентироавнный. ООП - это способ перевести работу в предметную область.
Если нельзя переписывать весь код и прежде всего иделогию построения задачи, незачем вообще заниматься ерундой. Оставь как есть. А ООП примени к следующей. Иначе и будут вылезать вопросы типа "коммутатор экземпляров класса"


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Borisff2003
Дата 24.9.2004, 05:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 198
Регистрация: 26.2.2004
Где: г. Уфа

Репутация: 1
Всего: 1



Да переопредели ты оператор [] и все!

Тебе же дали шаблон, добавь

T& operator[](int index)
{
return *(elements[i]);
}


И работай так, как будто экземпляр Коты, это массив из котов

Коты[i].ИмяФункцииИзКот();
Коты[i].ДанныеИзКот=0;
и тд

Почитай про коллекции!



--------------------
Лень, двигатель прогресса
PM MAIL WWW ICQ   Вверх
AndreyVN
Дата 24.9.2004, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 25.6.2004
Где: Здесь, в Волгогра де

Репутация: нет
Всего: нет



Цитата
Тебе же дали шаблон...


Спасибо конечно...
Но такую конструкцию Коты[i].ДанныеИзКот необходимо прописать где-то в 15 файлах для 30 переменных. В моем варианте, Хозяин наследуется от Котов и имя функции остается доступным как и было ИмяФункцииИзКот(), то есть задача решена, хотя это и
Цитата
Бестолковое занятие...
Собственно, я согласен, только альтернатива - переписать враз всю программу - еще более бестолкова.

Осталось как-то с данными разобраться, если не получится, переопределю оператор [], как Борис предлагает.


PM   Вверх
gray_k
Дата 24.9.2004, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1015
Регистрация: 9.1.2003
Где: Москва

Репутация: нет
Всего: 22



AndreyVN
У меня создалось впечатление, что Вы очень плохо разбираетесь в концепциях ООП. Советую сначала почитать общие принципы ООП, и в частности виды отношений между классами - зависимости, ассоциации, агрегации, композиции и обобщении.



--------------------
С уважением.
Gray.
PM MAIL   Вверх
Vyacheslav
Дата 24.9.2004, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



А черт его знает, может в его предметной области Кот может быть владельцем других Котов и сществует такой зверь Кот - состоящий из кучи Котов. Похоже
AndreyVN уверен, что ООП - это что то вроде умственных изысков, придуманных как лекарство от безделья.



--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
AndreyVN
Дата 24.9.2004, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 25.6.2004
Где: Здесь, в Волгогра де

Репутация: нет
Всего: нет



Цитата
AndreyVN уверен, что ООП - это что то вроде умственных изысков
С чего это Вы вдруг? Ваш вариант решения понятен
Цитата
Оставь как есть


В общем, тема исчерпана, вариант решения придложен один, спасибо.

А то, что с ООП я плохо знаком - честно предупредил в первом письме.
PM   Вверх
gray_k
Дата 24.9.2004, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1015
Регистрация: 9.1.2003
Где: Москва

Репутация: нет
Всего: 22



Цитата
В общем, тема исчерпана, вариант решения придложен один, спасибо.

А то, что с ООП я плохо знаком - честно предупредил в первом письме.

Так надо было кратко описать задачу и попросить совета в составлении объектной модели, а не задавать никому не понятные вопросы, ИМХО.


--------------------
С уважением.
Gray.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1990 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.