На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> Классы С++
    Такая ситуация: Имеем два класса

    class a
    {
    int variable;
    }

    class b
    {
    void func();
    }

    Надо , что бы при изменении a.variable класс b запускал func().
    может кто подскажет , что делать
      Hint: Функция "func()" не должна менять состояние экземпляра класса.

      class b
      {
      public:
      void func() const;
      }

      class a
      {
      int variable;
      public:
      void setVariavle(int v){ variavle = v; b::func(); }
      int getVariavle(int v){ return variavle; }
      }
        Если утебя окна то можешь использовать сообщения
          А если у тебя Билдер, то можешь использовать __property rolleyes.gif
            Цитата (Alexxxl @ 9.12.03, 18:34)
            Такая ситуация: Имеем  два класса

            class a
            {
              int variable;
            }

            class b
            {
                  void func();
            }

            Надо , что бы при изменении a.variable класс b запускал func().
            может кто подскажет , что делать

            ну если рассматривать изменение как присвоение (варианты с memcpy() на адрес этой переменной чего бы то ни было не рассматриваем), тогда напрашивается вывод:
            твоя переменная в классе а должна быть экземпляром твоего класса (нового), который во-первых
            имитирует работу с интом (рядом где-то мелькало), а во-вторых имеет перегруженный оператор присвоения, который как раз может вызывать функцию из класса b.
            конечно вопрос какая у тебя эта функция - статическая? тогда нет вопросов.
            иначе придется еще хранить ссылку на экземпляр класса b, для которого ты будешь вызывать
            эту функцию. но это уже детали.
              Например так:

              class a{
                 int variable;
              ...
               public:
                 void setVariable( int v, (void ( *fptr)(void)) func ){
                   variable = v;
                   if( func )func();
                 }

              }

              class b
              {
              void func();
              }

                2 Sazabis: Так не сработает.
                  вот так точно работает

                   v mv;
                   f mf;

                   mv.setVariable( 14, mf.func );


                  class v{
                     int variable;
                     typedef void ( __closure *fptr)(void);
                   public:
                     void setVariable( int v, fptr func ){
                       variable = v;
                       if( func )func();
                     }
                  };

                  class f{
                   public:
                    void func(){
                      int z = 0;
                      z++;
                    }
                  };

                    __closure - это Borland-specific.
                      так я в борланде отлаживал smile.gif

                      кстати, что за фигня, что борланд для функций членов __closure подставляет ? Для обычной функции все ок.
                      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      Рейтинг@Mail.ru
                      [ Script execution time: 0,0393 ]   [ 16 queries used ]   [ Generated: 3.05.24, 11:13 GMT ]