![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Нитонисе |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: нет Всего: 2 |
Проектирую класс. В нем есть свойство чем-то похожее на свойство Checked в RadioButton. То есть среди всех экземпляров класса в данный момент времени только у одного из них это свойство может быть равным true, соответственно у всех остальных это свойство равно false. Вот и вопрос - можно ли в методах класса вызывать методы своих сородичей? Ну например устанавливая свойство Checked в true нужно у всех сородичей это же свойство установить в false.
Это сообщение отредактировал(а) Нитонисе - 6.4.2013, 20:55 |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
Нитонисе, сделать то можно все.
Но я бы в данном случае сделал еще один класс, скажем RadioButton_group. т.е контейнер (в определенном смысле) этих самых RadioButton'ов. В пределах этого контейнера, только один RadioButton может быть включен, остальные выключены. за этим должен следить код этого самого контейнера. Если же вы сделаете как вы просите, то у вас получицца глобальный RadioButton_group. А если понадобицца второй? |
|||
|
||||
| Нитонисе |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: нет Всего: 2 |
Да, такое может быть. Значит допустим есть класс группы. В одном из членов группы происходит событие, аналогичное OnClick в RadioButton. Как известить об этом событии класс группы? Наверное в классе должна быть ссылка на класс группы и при событии OnClick нужно вызывать метод класса группы наподобие UnCheckAll()? |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
Можно и ссылку на группу хранить в объекте. Хотя, вероятно, можно и чтобы событие OnClick, приходило сразу группе, с указанием номера члена, которому это событие предназначаецца. А группа уже отправляет его нужному члену, и выключает других. Тогда член может вообще ничего не знать о группе. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 12 Всего: 459 |
Можно закольцевать объекты в циклический однонаправленный список. В случае возникновения события передавать его по цепочке пока оно не вернется начавшему. Есть только неудобство идентификации группы. Нужно где-то хранить указатель на один из элементов каждой группы. Также добавление в группу нужно будет делать внешними функциями. Функции есть, данные есть для этих функций, а их объединение уже суть новый объект
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Нитонисе |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: нет Всего: 2 |
Я реализовал эту идею. Но все же где-то как-то читал, что экземпляр класса может знать о существовании сородичей. Здесь тоже можно было бы использовать принцип группировки на основе индекса группы. Допустим часть экземплчров принадлежит группе с индексом 1, часть группе с индексом 2. Допустим в группе 1 одному из объектов присвоили уникальному свойству true, и автоматически пробежались по всем сородичам с таким же индексом группы, установив то самое свойство в false...
|
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Экземпляр класса может знать о других экземплярах того же класса - но в данном случае лучший вариант с группой экземпляров.
Но специальный класс для группы создавать не обязательно - можно использовать typedef.
|
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
||||
|
||||
| Guinness |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 21.6.2009 Где: Зеленоград Репутация: нет Всего: 10 |
Если проецировать данную задачу на графический интерфейс, то там у всех этих объектов(RadioButton) есть parent, в котором они содержатся. Думаю можно плясать от этого.
1). В классе держим статический список со всеми экземплярами класса. В конструкторе каждого объекта добавляемся в этотт список. 2). Соответственно, дальше уже работаем по этому списку, т.е., если экземпляр класса помечают как активный(true), мы проходим по этому списку в поисках объектов с тем же parent`ом и делаем их неактивными(false). 3). При удалении объекта, в деструкторе удаляем себя из списка. Можно делать и так. Но имхо, лучше наверно, не стоит. |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
в гуе этот парент может быть окном, в котором несколько групп кнопок. сама группа может задаваться неявно (номером группы, присвоенным каждой кнопке). |
|||
|
||||
| Guinness |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 21.6.2009 Где: Зеленоград Репутация: нет Всего: 10 |
Действительно, это так, не знал. Просто у меня привычка в GroupBox`ах компоновать такие вещи. Тогда можно посмотреть какой интерфейс уже предложен для групп http://qt-project.org/doc/qt-4.8/qbuttongroup.html Тогда в моем примере, приведенном выше, нужно будет инициализировать объект id-группы (int). И работать по этим id. Но я думаю, придумывать велосипед не стоит. Это сообщение отредактировал(а) Guinness - 8.4.2013, 10:54 |
|||
|
||||
| Lukkoye |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 23.3.2013 Репутация: 1 Всего: 1 |
гугли "статические члены класса"
И не нужны будут никакие дополнительные переменные в объектах |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |