Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как запрограммировать событие в моем классе? 
:(
    Опции темы
Нитонисе
Дата 30.10.2010, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Есть такой класс
Код

class myClass
{
  public:
    void setX(int newX) {X = newX;}
    void calculate() {XX = X*X};

  protected:
    int X;
    int XX;
};


Нужно сделать так, чтобы класс знал, что у него меняется параметр "Х" и автоматически вызывал метод calculate(). То есть реагировал на событие. Понятно, что этот метод можно прямо прописать в setX, но такой способ мне не подходит не буду объяснять почему, просто надо именно реакция на событие  smile 
PM MAIL   Вверх
borisbn
Дата 31.10.2010, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 18
Всего: 135



Цитата(Нитонисе @  30.10.2010,  19:06 Найти цитируемый пост)
не буду объяснять почему

в таком случае, скорее всего, тебе и не поможет никто smile


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Нитонисе
Дата 31.10.2010, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(borisbn @  31.10.2010,  10:01 Найти цитируемый пост)
в таком случае, скорее всего, тебе и не поможет никто

Наверно непонятно сформулировал  smile 
PM MAIL   Вверх
borisbn
Дата 31.10.2010, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 18
Всего: 135



Цитата(Нитонисе @  31.10.2010,  10:29 Найти цитируемый пост)
Наверно непонятно сформулировал

похоже на то.
Если тебе нужно, чтобы класс сам узнал о том, что меняется X ( вызвалась ф-ция setX ), то ничего лучше нет, как вызывать в функции setX ф-цию calculate()
Если же тебе нужно, чтобы о событии изменения узнал бы кто-то снаружи класса, то нужно городить события типа __property TNotifyEvent


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Нитонисе
Дата 31.10.2010, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(borisbn @  31.10.2010,  16:02 Найти цитируемый пост)
Если тебе нужно, чтобы класс сам узнал о том, что меняется X ( вызвалась ф-ция setX ), то ничего лучше нет, как вызывать в функции setX ф-цию calculate()Если же тебе нужно, чтобы о событии изменения узнал бы кто-то снаружи класса, то нужно городить события типа __property TNotifyEvent

Схема такая. Есть класс, который высчитывает некоторую величину на основе своих аргументов. Но эти аргументы могут постоянно меняться множеством функций, в каждой из них прописывать calculate() - какое-то кривое решение, по-моему. Хотелось бы чтобы при изменении хоть одного из параметров, от которого зависит вычисляемое значение, генерировалось некое событие, в обработчик которого я бы и поместил calculate().
PM MAIL   Вверх
xvr
Дата 1.11.2010, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(Нитонисе @  30.10.2010,  19:06 Найти цитируемый пост)
Нужно сделать так, чтобы класс знал, что у него меняется параметр "Х" и автоматически вызывал метод calculate(). 
Опиши твой X как __propery

Код

class myClass
{
  public:
    void setX(int newX) {X = newX;}
    void calculate() {XX = X*X};
  protected:
    int real_X;
    __property int X = {read=real_X, write=update_x};
    int XX;
    void update_x(int x) {real_X=x; calculate();}
};

PM MAIL   Вверх
Нитонисе
Дата 1.11.2010, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(xvr @  1.11.2010,  12:40 Найти цитируемый пост)
Опиши твой X как __propery

Не стречал такого. Где доступно о "__property" этом можно почитать?
PM MAIL   Вверх
xvr
Дата 1.11.2010, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(Нитонисе @  1.11.2010,  13:35 Найти цитируемый пост)
Не стречал такого.
 smile Весь Builder на них построен.

Цитата(Нитонисе @  1.11.2010,  13:35 Найти цитируемый пост)
Где доступно о "__property" этом можно почитать?
В help'е Builder'а вестимо


PM MAIL   Вверх
Нитонисе
Дата 1.11.2010, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(xvr @  1.11.2010,  14:26 Найти цитируемый пост)
  Весь Builder на них построен.

Я имел ввиду литературу по С++) проперти - это билдеровская фишка?
PM MAIL   Вверх
xvr
Дата 1.11.2010, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(Нитонисе @  1.11.2010,  15:54 Найти цитируемый пост)
проперти - это билдеровская фишка?
Да, чисто Builder'овская. На С++ можно сделать аналог, через класс с перегруженным оператором приведения типа и присваиванием (по 1 инстансу на каждую проперть). 

PM MAIL   Вверх
mrbrooks
Дата 1.11.2010, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Цитата(xvr @  1.11.2010,  16:27 Найти цитируемый пост)
Да, чисто Builder'овская. На С++ можно сделать аналог, через класс с перегруженным оператором приведения типа и присваиванием (по 1 инстансу на каждую проперть). 

по сути это паттерн Command

Добавлено через 57 секунд
но есть ли смысл с ним работать в дебилдере - вещь не однозначная.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0527 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.