Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как грамотно организовать передачу данных между классами?  (Прочитано 9749 раз)
0 Пользователей и 1 Гость смотрят эту тему.
beginner_in_C++
Гость
« : 02-02-2007 17:55 » 

Подскажите пожалуйста как грамотно организовать следующее:
Есть 2 диалога,для каждого диалога создан свой класс,
на одном есть EDITBOX, с которым связана целочисленная переменная,и необходимо в дальнейшем использовать значение введенное в этом EDITBOX'е при создании 2-го диалога,
вопрос в том как это организовать, пробовал следующее:

Создание объекта - Диалог 1:
CFirst first;
HWND hDlg=first;
first.DoModal();

Попытка получить значение из эдит бокса(в области видимости 2-го класса(диалога)):
BOOL *ptra=NULL;
int b=::GetDlgItemInt(hDlg,IDC_EDIT1,ptra,true);

ошибка следующая, в принципе логичная:
D:\Code______\77\Button\Specify.cpp(54) : error C2065: 'hDlg' : undeclared identifier
как граммотно организовать передачу значения переменной из одной области видимости в другую?
Вариант с объявлением глобальных переменных не интересует.
Передача значения как параметра конструктору объекта второго класса тоже не интересует, дело в том что значение нужно для создания(не отображения) соответствующего количества контролов на 2-ом диалоге
« Последнее редактирование: 12-12-2007 16:11 от Алексей1153++ » Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 03-02-2007 08:09 » 

Можно сделать класс-хранилише. Применить в этом классе паттерн проектирования Singleton.

В Файлы твоих классов подцепить этот класс. В конструкторе просто вызвать стат-метод создания класса-хранилиша. И затем уже можно обмениваться через него инфой.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #2 : 05-02-2007 06:39 » 

Передача значения как параметра конструктору объекта второго класса тоже не интересует, дело в том что значение нужно для создания(не отображения) соответствующего количества контролов на 2-ом диалоге

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

Можно сделать класс-хранилише. Применить в этом классе паттерн проектирования Singleton.

В Файлы твоих классов подцепить этот класс. В конструкторе просто вызвать стат-метод создания класса-хранилиша. И затем уже можно обмениваться через него инфой.

Синглетоны это ЗЛО Улыбаюсь
хотя хранить общедоступный указатель на класс хранилище настроек или передавать в качестве параметров конструктора класс идея здаравая, но НЕ вкоем случае(если ты не уверен в последствиях Улыбаюсь ) синглетон не должен быть с неуправляемым временем жизни, т.е. минимум не статик, т.к. в этом случае нет гарантии, что класс настроек не будет унечтожен позже других объектов при разрушении программы, т.к. для статических объектов не определён порядок создания между еденицами трансляции
например
объект настроек создан в объектном файле conf.obj, а объект его использующий в form.obj поле линковки в файл form.exe не известно объекты какого из объектных файлов будут сформированные в первую очередь

у нас в конторе был случай когда использование синглетонов приводило к дедлоку мьютексов при выгрузке DLL из памяти.
для избежания подобных проблем после загрузки библиотеки использовали метод Init который создавал глобальные объекты(или объекты передающиеся в качестве параметра в другие), а перед выгрузкой finish который уничтожал объекты
Записан

Странно всё это....
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines