C++中CallBack類的使用方法

使用CallBack類,可按以下步驟進行:

1.確定程序中哪些對象間存在關係,需要建立消息連接。並確定在各特定消息連接關係中,哪個對象是事件對象,哪個對象是回調對象。

2.事件對象類和回調對象類都必須從CallBack類繼承,以獲得回調支持。

3.為事件對象註冊回調數據。包括:事件名,回調函數名,指向回調對象的指針。

4.當你感興趣的事件發生時,在事件對象類引發事件的成員函數中調用CallCallBack函數。

下面是一個具體的例子。通過它你會對Callback類的使用方法有進一步的了解。

//測試程序文件:test.cpp

#include"callback.h"

//「揚聲器」類

class Speaker:public CallBack

{

private:

int volume;

public:

Speaker(int v): volume(v) {}

void IncreaseVolume(int v) //增加音量成員函數

{

volume += v;

if(volume > 20){ //「音量大於20」事件發生了

//調用註冊在兩事件上的回調函數

CallCallBack( "音量改變了");

CallCallBack( "音量大於20", &volume);

}

}

void DecreaseVolume(int v) //降低音量成員函數

{

volume -= v;

if(volume < 5){ //「音量小於5」事件發生了

//調用註冊在兩事件上的回調函數

CallCallBack( "音量改變了");

CallCallBack( "音量小於5", &volume);

}

}

};

//「耳朵」類

class Ear : public CallBack

{

public:

static void Response(CallData callData) //對「音量改變」的反應

{

cout <<"音量改變了."<

}

void HighVoiceResponse(CallData callData)//對高音的反應

{

cout<<」餵!太吵了!現在音量是:"<<*((int *)callData)<

}

void LowVoiceResponse(CallData callData)// 對低音的反應

{

cout<<"啊!我聽不清了。現在音量是:"<<*((int *)callData)<

}

};

void main(void)

{

Speaker s(10); //現在音量為10

Ear e;

//為事件對象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和 DecreaseVolume改變音量時,回調對象e會自動作出反應。可見,通過使用CallBack類,在對象間建立消息連接已變為一項很簡單和優美的工作。

相關文章

  1. Flash中String類字符串索引方法的使用

    在Flash中,字符串類型有很多方法,其中的字符串索引方法是怎樣使用的呢? 筆者介紹一下String類的字符串索引方法的使用. 工具/原料 Flash CS6 方法/步驟 打開一個已有的Flash文件 ...
  2. Java中String類的主要方法及應用

    Java語言是美國Sun公司(Stanford University Network/史丹福大學網絡公司),在1995年推出的高級的編程語.隨著Java語言的不斷推廣和發展,Java語言已經成為目前主 ...
  3. 如何理解java中的類,屬性,方法和繼承

    如何理解java中的類,屬性,方法和繼承. 以車為例. 方法/步驟 如果把車看成是一種類,那麼我們沒說明它到底是哪一輛車.類,你可以理解為"類型",比如人類,是一個大類型,但是絕對 ...
  4. 完美世界中4類神兵寶物及使用方法

    在小說完美世界中有很多珍貴神兵,而按類型可以分為以下幾種. 方法/步驟 兵刃法寶類 赤羽寶扇:淵族鎮族寶具 鎮魂塔:虛神界特有,在虛神界中殺人同時亦可誅滅真身 衣甲類 白虎戰衣:以前代白虎遺留下的寶皮 ...
  5. java中DataGramSocket類中connect方法詳解

    Java 的UDP的實現主要靠的是DataGramSocket類來實現,基礎的東西網上多的是,例子也是一大片的.這裡如果想學最基礎的東西建議不要怎麼看,本文主要對UDP的連接問題的一個概述: 方法/步 ...
  6. 在C++中訪問類的私有成員變量的方法有哪些?

    在C++中訪問類的私有成員變量經常用到的方法主要有如下三種: 1.set/get接口 2.友元類 3.友元函數 工具/原料 C++ 類定義 //圖片類 定義如下圖片類,現在我們只考慮私有成員變量m_s ...
  7. 家裝污染中苯類物質的治理方法

    家居污染的第二大殺手就是苯污染.人在短時間內吸入高濃度的甲苯或二甲苯,會出現中樞神經麻醉的症狀,嚴重的導致呼吸系統衰竭而死亡. 苯的介紹 苯主要來自室內裝修用的塗料.木器漆.膠黏劑及各種有機溶劑里.目 ...
  8. logistic回歸分析中多分類變量的類間比較方法

    回歸分析中,常常遇到自變量是多分類變量,該如何處理呢?①樣本量少時,看做離散型定量變量:②樣本量大時,設置啞變量,多分類變量有g個水平,則使用(g-1)個二分類變量表示該多分類變量.本經驗正是要講明l ...
  9. 生活中幾類膚質的美白的方法

    塗美白護膚品(包括面霜.精華素.面膜及潔面乳)為了淡化已經形成的色斑,也為了護理平日裡受創的肌膚.至於你是否需要用上一整套美白系列,則要看各人的膚質而定. 一.暗色肌膚 暗色皮膚不需要刻意全部使用美白 ...
  10. Java中String類的方法

    String類型有很多方法:這次經驗是length()長度:subString(2,4)截取字符串2到4的子字符串包含2單不包含4;equals()判斷字符串值是否相等;compareTo比較兩個字符 ...
  11. 辣椒及辣椒製品中辣椒素類物質檢測方法

    辣椒對人們在熟悉不過了,但是辣椒中的辣椒素大家不一定了解,我們要怎樣才能檢測出辣椒中的辣椒素類物質呢?下面的方法會告訴你! 方法/步驟 一.範圍 用高效液相色譜法測定辣椒及辣椒製品中辣椒素類物質的方法 ...
  12. 如何使用python語言中的類並調用類中的方法實現

    在python設計語言中,跟其他類型的程式語言一樣,可以直接使用class定義類,並且可以在類中定義方法,可以直接通過類來調用方法.下面利用一個實例說明類和類方法的定義和用法,操作如下: 工具/原料 ...
  13. 在EXCEL中設置關於類四捨五入的方法

    日常工作生活中可能會遇到類四捨五入的情況,例如:1.菜市場買菜找零的時候:2.車輛維修時間轉化工時的時候,等等遇到類似的情況,需要用EXCEL表進行統計.整理.分析:那麼就要用到CEILING公式,此 ...
  14. 如何調用python語言中的類中的方法並列印屬性值

    在python語言中,使用關鍵字class定義類,可以在類中創建函數方法__init__.可以在類的外面實例化一個對象,然後利用這個對象獲取方法中的屬性.下面利用一個實例說明,操作如下: 工具/原料 ...
  15. 如何在python語言中調用類中的私有方法

    在python語言中,可以在類中定義私有方法,但是不能直接調用私有方法,需要通過公開的方法調用私有方法.下面利用一個實例說明如何調用私有方法並且不報錯,操作如下: 工具/原料 python pycha ...
  16. 如何使用python語言中的類實現方法的重寫

    在我們使用python語言類中方法,如果子類繼承了父類,而父類的方法又不滿足子類,這時需要將父類的方法進行重寫.下面利用一個實例說明如何實現類方法的重寫,操作如下: 工具/原料 python pych ...
  17. 如何使用python語言類中調用被重寫的方法並使用

    在python語言中,如果子類重寫了父類的方法,該如何調用這個方法呢?一般情況下,有兩種方,第一:直接使用類來調用這個方法,第二:使用super方法調用這個方法.下面利用具體的實例說明,操作如下: 工 ...
  18. 如何使用python語言中的類實現多繼承並調用方法

    在python語言中,如果子類只繼承一個父類,這表示單繼承:如果子類繼承兩個或兩個以上的父類,這是多繼承.多繼承的子類調用方法.下面利用一個實例說明如何實現類的多繼承,操作如下: 工具/原料 pych ...
  19. 如何使用ES6中的類和方法計算三角形面積和周長

    在JavaScript的ES6中,添加類似Java語言中的類,使用class關鍵字來定義:而且類中也可以定義構造函數constructor.下面利用類和方法計算三角形面積和周長,操作如下: 工具/原料 ...
  20. 如何使用ES6中的類的get和set方法並進行調用

    一般情況下,我們可能在Java代碼常用到get和set方法,同樣的,在ES6中也可以使用get和set方法.定義類時,可以在類中再創建get方法和set方法.下面利用實例說明如何定義這兩個方法,操作如 ...