Russian Qt Forum
Ноябрь 24, 2024, 01:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Передача данных  (Прочитано 11372 раз)
deaks
Гость
« : Февраль 16, 2011, 12:34 »

Добрый день,

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

Есть объект, который в себя включает Динамику(Dynamic) и Управление(Control).

Соответственно система включает в себя еще больше компонентов, показана лишь часть.



Записан
santaclaus
Гость
« Ответ #1 : Февраль 16, 2011, 13:16 »

ну в том месте где они оба используются, соединить их сигналом и слотом, что бы один класс делал
Код:
emit mySignal("MyParametr");
а второй соответственно
Код:
connect(sender, SIGNAL(mySignal(QString)), reciver, SLOT(slotSetParam(const QString &)));
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #2 : Февраль 16, 2011, 13:18 »

santaclaus, с чего ты взял, что тут есть сигналы/слоты?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
deaks
Гость
« Ответ #3 : Февраль 16, 2011, 13:20 »

ну

во-первых мне надо в рамках чистого c++, без qt
во-вторых здесь опять же нет связи через Object

я реализовывал все это дело структурами, то есть все нужные параметры определенного класса упаковывал в структуру и потом возвращал указатель на нее через интерфейс. но это дело не понравилось, так как в классах появились наследуемые структуры
Записан
Sergey B.
Программист
*****
Offline Offline

Сообщений: 544



Просмотр профиля WWW
« Ответ #4 : Февраль 16, 2011, 13:45 »

Посмотрите на libsig++ как там это сделано. Оно используется в Gtkmm. Чистый С++.
Записан
Fat-Zer
Гость
« Ответ #5 : Февраль 16, 2011, 13:47 »

глупый вопрос, но пунктирная стрелочка в терминах C++ что означает? виртуальное наследование?
« Последнее редактирование: Февраль 16, 2011, 14:16 от Fat-Zer » Записан
deaks
Гость
« Ответ #6 : Февраль 16, 2011, 14:01 »

мой вопрос глупый? Оо

пунктирная стрелочка - интерфейс
Записан
deaks
Гость
« Ответ #7 : Февраль 16, 2011, 14:03 »

Посмотрите на libsig++ как там это сделано. Оно используется в Gtkmm. Чистый С++.

а если кроме сигнал-слотов? какие еще возможны варианты. задача-то вполне ординарная
Записан
deaks
Гость
« Ответ #8 : Февраль 16, 2011, 14:06 »

так как класс Object включает интерфейсы IControl, IDynamic, то как через эти интерфейсы лучше всего возвращать требуемые значения соответствующих классов потомков
Записан
Fat-Zer
Гость
« Ответ #9 : Февраль 16, 2011, 14:16 »

мой вопрос глупый? Оо
пунктирная стрелочка - интерфейс
Нет, это я про свои вопросы... а в цпп это ведь через обычное наследование реализуется...
Записан
deaks
Гость
« Ответ #10 : Февраль 16, 2011, 14:25 »

 Улыбающийся
ага это и есть обычное наследование)
а такая стрелка - различает обычные классы-потомки и классы-интерфейсы)
Записан
deaks
Гость
« Ответ #11 : Февраль 16, 2011, 14:55 »

товарищи, посоветуйте какой-нибудь изящный вариант решения)
Записан
developer
Гость
« Ответ #12 : Февраль 16, 2011, 15:38 »

Не знаю поможет ли мой ответ. Но возможно должен хотя бы на что-то направить.

Припустим ты создаеш два класса А и Б. Класс А должен быть уведомлен если класс Б изменил свою переменную.

А что если создать класс С и передать как переменную в классы А и Б.

Код:

class C:
{
    private:
       Container<object*> container;
   
    public:
        void update() { /*pseudocod*/ foreach(Container<object*> o, container) { o->changeSomething(/*set of params*/); } };
        void addClass(object* obj) { container.append(obj); }
}

//
С* с = new C();
A* a = new A(c);
B* b = new B(c);

//потом класс С сделать контейнером для классов Б и А.
c->addClass(a);
c->addClass(b);

// тепер когда в классе А что-то случиться вызвать функцию update() класса С
..........
void ClassA_or_B_function()
{
       //ссылку на с мы уже више настроили.
       c->update();
}
..........







Записан
deaks
Гость
« Ответ #13 : Февраль 16, 2011, 16:19 »

похожий вариант в принципе рассматривал,

но хочется чтобы за все манипуляции отвечал Object через интерфейсы
Записан
twp
Гость
« Ответ #14 : Февраль 16, 2011, 17:10 »

не уверен, но вероятно здесь подойдет паттерн проектирования Посредник (Медиатор)
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.051 секунд. Запросов: 22.