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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Взаимодействие между классами  (Прочитано 4635 раз)
ti0
Новичок

Offline Offline

Сообщений: 38


Просмотр профиля
« : Июнь 15, 2014, 13:04 »

При написании более-менее сложных приложений часто сталкиваюсь с следующей ситуацией:
есть классы A, B и С. В классе "А" пишем b = new B, c = new C; Вопрос собственно в том, как взаимодействовать между классами B и C миную А? Т.е. как вызвать метод из C в B, например?
Использовать статические методы не выход.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Июнь 15, 2014, 13:24 »

в Qt — сигналы/слоты, «просто так» — указатель на объект передавать
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #2 : Июнь 15, 2014, 14:36 »

При написании более-менее сложных приложений часто сталкиваюсь с следующей ситуацией:
есть классы A, B и С. В классе "А" пишем b = new B, c = new C; Вопрос собственно в том, как взаимодействовать между классами B и C миную А? Т.е. как вызвать метод из C в B, например?
Использовать статические методы не выход.

1. можно сообщить объекту C указатель на объект B. И тогда объект C сможет дергать объект B
2. можно использовать делегаты. Например: std::function, или кутешные сигналы-слоты
3. можно использовать EventSystem. Объект С излучает сообщение в эфир, а его слушает объект B.


Записан
ti0
Новичок

Offline Offline

Сообщений: 38


Просмотр профиля
« Ответ #3 : Июнь 15, 2014, 16:24 »

Спасибо за ответы. И еще один маленький вопросик)) Есть классы A, B, C. Методы классов B и C объявлены одинаковыми, но в самих методах содержимое разное. Нужно в зависимости от настроек, использовать в классе А либо В, либо С. Как это организовать?
Тут сильно просятся плагины/dll библиотеки, но я бы хотел обойтись без них.
Записан
Bepec
Гость
« Ответ #4 : Июнь 15, 2014, 16:33 »

Наследовать их от общего предка, потом указатель просто подставлять нужный.
Записан
ti0
Новичок

Offline Offline

Сообщений: 38


Просмотр профиля
« Ответ #5 : Июнь 19, 2014, 23:59 »

По поводу предыдущего сообщения. Нужно использовать виртуальный класс
Записан
Bepec
Гость
« Ответ #6 : Июнь 20, 2014, 07:08 »

Скорее класс с виртуальными методами Улыбающийся От которого всё равно придётся наследоваться Веселый
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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