回调函数

回调函数

    今天面试了2家公司,还算可以吧,明天还得去西站接我朋友,下午还得继续面试,今天回来好累啊,我知道找工作是很辛苦的,加油吧,但是再累博客也得更新吧,因为今天不更新的话,明天也不会更新了,还是最好不开这个头,找一个小的知识点,探讨一下:回调函数。

    在看回调函数之前,要先理解函数指针的概念,在我的博客:函数指针与函数指针数组的使用方法——http://blog.csdn.net/feitianxuxue/article/details/7300291里面有阐述的。

    回调函数,顾名思义,就是使用者自己定义一个函数,使用者自己实现这个函数的程序内容,然后把这个函数作为参数传入别人(或系统)的函数中,由别人(或系统)的函数在运行时来调用的函数。函数是你实现的,但由别人(或系统)的函数在运行时通过参数传递的方式调用,这就是回调函数。

    简单的说,就是由别人的函数运行期间来回调你实现的函数。

    常见的例子是这样的:使用者在系统中调用一个系统函数,然后这个系统函数再回调使用者自己定义的一个函数。

    下面来实现一个简单的回调函数:通过修改Hello World程序的例子来实现自己的回调函数。

    标准Hello World程序:

int _tmain(int argc, _TCHAR* argv[])
{
 cout<<"Hello World"<<endl;
 system("pause");
 return 0;
}

    将之修改成如下函数回调的样式来达到Hello World的效果。

#include <iostream>
using namespace std;

void settext()                  //在此定义实现“回调函数”
{
 cout<<"Hello World"<<endl;
}

void enumfunc(void(*enumchild) ())   //在此定义实现回调函数的“调用函数”
{
 enumchild();
}

int _tmain(int argc, _TCHAR* argv[])   
{
 enumfunc(settext);                //在main主函数中实现函数回调
 system("pause");
 return 0;
}

    这是一个简单的回调函数的例子,在定义了“回调函数”和实现回调函数的“调用函数”后,就轻松实现了需要的函数回调。上面的demo是不带参数的回调函数,下面把上面的例子修改成带参数的回调函数。

#include <iostream>
using namespace std;

void settext(char* s)                  //定义带参的“回调函数”
{
 cout<<s<<endl;
}

void enumfunc(void(*enumchild) (char*),char*s)   //定义带参数的回调函数的“调用函数”
{
 enumchild(s);
}

int _tmain(int argc, _TCHAR* argv[])
{
 enumfunc(settext,"Hello World!");                //在main主函数中实现带参数的函数回调
 system("pause");
 return 0;
}


 

参考资料:《c++编程关键路径》 中国水利水电出版社 梁永军著  P100-P103

 

你可能感兴趣的:(编程,c,工作,面试,System,出版)