注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

轻松度过每一天

真的猛士敢于直面惨淡的人生,敢于正视淋漓的鲜血,这是怎样的哀痛者和幸福者!!

 
 
 

日志

 
 
关于我

When you are young, you may want several love experiences. But as timegoes on, you will realize that if you really love someone, the wholelife will not be enough. You need time to know, to forgive and to love.All this needs a very big mind.

网易考拉推荐

四、回调函数,回调机制  

2014-08-06 17:10:03|  分类: com.myCompany.Te |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 

1.  回调函数,就是一个通过函数指针调用的函数。

   如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数

基本格式:void (*Func) (int& a, int& b);

可用typedef简化,如

typedef int mint//mint命名为int的别名。

函数指针,只能指向同返回,相同参数类型的函数

那么函数指针怎样用呢

typedef void (*Func) (int& a, int& b);

这就定义了一个函数指针的类型。在我们用的时候

直接,Func m_fFunc m_fFunc就是一函数指针。

 

回调机制:比较抽象,难于理解。

用老师将的一个列子来说明,先贴上代码。

四、回调函数,回调机制 - 世界不属于我 - 轻松度过每一天
 

######main.cpp#########

#include <iostream>

#include "Mom.h"

#include "Son.h"

#include "HomeTalk.h"

using namespace std;

 

void speak(int& a, int& b){

 

    cout<< "high:"<< a << ",weight:" <<b<< endl;

}

int main(int argc, const char * argv[])

{

 

    // insert code here...

//    std::cout << "Hello, World!\n";

   

//    Mom m("s",1);

//    m.setCallBack(speaker);

//    m.pirnt(4, 1);

    Mom* m = new Mom;

    Son* s = new Son;

 

    HomeTalk home(m,s);

    home.momQuestion();

   

    delete m;

    delete s;

   

    Son ss;

    ss.setCallBack1(speak);

    ss.print(2,3);

    return 0;

}


######Mom.cpp#######

#include "Mom.h"

 

Mom::Mom(){}

Mom::~Mom(){

 

    cout << "~Mom...." << endl;

}

 

void Mom::momQuestion(Son* son, const string& str){

   

    son->sonResponse(str);

}

#######Mam.h######

 

#ifndef __c__20140724__Mom__

#define __c__20140724__Mom__

 

#include <iostream>

#include "Son.h"

using namespace std;

 

class Mom{

   

private:

    Son m_sSon;

public:

    Mom();

    ~Mom();

   

    void momQuestion(Son* son,const string& str);

//    void print(int& a,int& b);

   

};

 

 

#endif /* defined(__c__20140724__Mom__) */


######Son.cpp#######

#include "Son.h"

 

Son::Son() : response(NULL){}

 

void Son::sonResponse(const string& str){

 

    response->response(str);

}

 

void Son::setCallBack(Response* r){

 

    response = r;

}

Son::~Son(){

   

    cout << "~Son...." <<endl;

}

 

void Son::setCallBack1(Func c){

 

    m_fFunc = c;

}

 

void Son::print(int a,int b){

   

//    int a=2,b=3;

    m_fFunc(a,b);

}

########Son.h#######

#ifndef __c__20140724__Son__

#define __c__20140724__Son__

#include "Response.h"

#include <iostream>

using namespace std;

class Response;

class Son;

typedef void (*Func) (int& a, int& b);

 

class Son{

private:

    Response* response;

    Func m_fFunc;

public:

    ~Son();

    Son();

    void sonResponse(const string& str);

    void setCallBack(Response* r);

   

    void setCallBack1(Func c);

    void print(int a, int b);

};

 

#endif /* defined(__c__20140724__Son__) */


######Response.cpp#######

include "Response.h"

######Response.h#######

#ifndef __c__20140724__Respond__

#define __c__20140724__Respond__

 

#include <iostream>

using namespace std;

class Response{

 

public:

    virtual void response(const string &str) = 0;

};

 

#endif /* defined(__c__20140724__Respond__) */


 

#####HomeTalk.cpp#########

#include "HomeTalk.h"

 

HomeTalk::HomeTalk(Mom* mom,Son* son) : m_mMom(mom), m_sSOn(son){

 

    son->setCallBack(this);

}

 

void HomeTalk::response(const string &str){

 

    cout << "your question:" << str << ",i can't answer"<< endl;

}

 

void HomeTalk::momQuestion(){

 

    m_mMom->momQuestion(m_sSOn, "what are you doing");

}

 

######HomeTalk.h#######

#ifndef __c__20140724__HomeTalk__

#define __c__20140724__HomeTalk__

 

#include <iostream>

#include "Response.h"

#include "Mom.h"

#include "Son.h"

class HomeTalk : Response{

private:

    Mom* m_mMom;

    Son* m_sSOn;

public:

    HomeTalk(Mom* mom,Son* son);

    void momQuestion();

    virtual void response(const string &str);

};

 

#endif /* defined(__c__20140724__HomeTalk__) */


 

解析:

回调机制的好处,易于修改,结构清晰,易于扩展,方便后续开发

main,新建对象HomeTalk

class MommomQuestionsonResponse

class SonsetCallBack得到回调函数-response->response()

class Response,纯虚函数,由子类调用,定义

class HomeTalk,初始化setCallBackresponse。整个过程结束

  评论这张
 
阅读(30)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017