}
}
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)// 对低音的反应
{
};
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