Russian Qt Forum

Программирование => С/C++ => Тема начата: ti0 от Июнь 15, 2014, 13:04



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


Название: Re: Взаимодействие между классами
Отправлено: kambala от Июнь 15, 2014, 13:24
в Qt — сигналы/слоты, «просто так» — указатель на объект передавать


Название: Re: Взаимодействие между классами
Отправлено: _Bers от Июнь 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.




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


Название: Re: Взаимодействие между классами
Отправлено: Bepec от Июнь 15, 2014, 16:33
Наследовать их от общего предка, потом указатель просто подставлять нужный.


Название: Re: Взаимодействие между классами
Отправлено: ti0 от Июнь 19, 2014, 23:59
По поводу предыдущего сообщения. Нужно использовать виртуальный класс


Название: Re: Взаимодействие между классами
Отправлено: Bepec от Июнь 20, 2014, 07:08
Скорее класс с виртуальными методами :) От которого всё равно придётся наследоваться :D