C++中建立对象间消息连接的系统方法(二)

2014-11-24 13:20:05 · 作者: · 浏览: 43
ck("音量大于20", &volume);
    }
   }

  void DecreaseVolume(int v) file://降低音量成员函数
  {
   volume -= v;
   if(volume < 5){ file://“音量小于5”事件发生了
    file://调用注册在两事件上的回调函数
    CallCallBack("音量改变了");
    CallCallBack("音量小于5", &volume);
   }
  }
};

file://“耳朵”类

class Ear : public CallBack
{
  public:
   static void Response(CallData callData) file://对“音量改变”的反应
   {
    cout<<"音量改变了."<    }
   void HighVoiceResponse(CallData callData)//对高音的反应
   {
    cout<<”喂!太吵了!现在音量是:"<<*((int *)callData)<    }
   void LowVoiceResponse(CallData callData)// 对低音的反应
   {
    cout<<"啊!我听不清了。现在音量是:"<<*((int *)callData)<    }
};

void main(void)
{
  Speaker s(10); file://现在音量为10
  Ear e;
  file://为事件对象s注册回调函数
  s.AddCallBack("音量大于20”,(CallBackFunction)&Ear::HighVoiceResponse,&e);
  s.AddCallBack("音量小于5”,(CallBackFunction)&Ear::LowVoiceResponse,&e);
  s.AddCallBack("音量改变了",(CallBackStaticFunction)&Ear::Response);
  s.IncreaseVolume(12);//将音量增加12,现在音量位22
  s.DecreaseVolume(20);//将音量减少20,现在音量位2
}

   运行结果:

   音量改变了.

   喂!太吵了!现在音量是:22

   音量改变了.

   啊!我听不清了。现在音量是:2

   在上例中,扬声器对象s为事件对象,耳朵对象e为回调对象。。s上被注册了三个事件:“音量改变了”,“音量大于20”,“音量小于5”。 回调函数分别为:Ear::Response, Ear::HighVoiceResponse,Ear::LowVoiceResponse。当扬声器s通过其成员函数IncreaseVolume和 Decrease