C++学习:回调函数(Callback)

简介:
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应
可能这些概念性的东西不是太好理解,通俗一点,回调函数就是在两个独立函数或者独立类通信的通道。
举个例子:
 财务处是负责对公司财务状况和每个月的开销进行汇总
老板只会去看每个月的报表
 那么在这个当中,老板不会去关心,财务整个汇总的过程,他只会去关心结果,那么,如果从面向对象的方法去理解的话,老板是一个对象.财务部是一个对象,当老板想看报表的时候,会跟财务打个招呼,等财务部汇总完了.然后将报表再去提交给老板,那么问题来了,而两个类之间实现通信的就是接口回调,从财务类的中,将结果回调到对象中.这种实现是通过接口自动完成的。
C++实现代码: 摘自:http://blog.csdn.net/qq_29924041

#include <iostream>
#include "finance.h"
using namespace::std;
using namespace::zzf;

int main(int argc, char *argv[])
{
	int array[10] = { 1,2,3,4,5,6,7,8,9,10 };
	Boss boss;
	boss.readFianace(array, 10);
	return 0;
}

finance.h

#pragma once
#ifndef __FINANCE_H__
#define __FINANCE_H__

namespace zzf 
{
	#include <iostream>
	using namespace::std;
	/* *
	*定义一个CallBack的接口
	* */
	class CallBack
	{
	public:
		virtual void setFinanceResult(int result)  const = 0;
	};

	/* *
	*财务:
	专门用于计算结果的
	* */
	class Finance
	{
	public:
		Finance(CallBack* mCallBack2) :mCallBack(mCallBack2)
		{
			cout << "finance constructor" << endl;
		}
		~Finance()
		{
			cout << "finance destructor" << endl;
		}
		void caculateFinance(int * a, int n)
		{
			int result = 0;
			for (int i = 0;i < n;i++)
			{
				result += *(a + i);
			}
			if (mCallBack != NULL)
			{
				cout << "result:" << result << endl;
				mCallBack->setFinanceResult(result);
			}
		}
	private:
		CallBack* mCallBack;
	};


	/* *
	*老板,实现接口CallBack
	* */
	class Boss :public CallBack
	{
	public:
		Boss()
		{
			//将接口实例化后,传递给Finance
			mFinace = new Finance(this);
			cout << "boss constructor" << endl;
		}
		~Boss()
		{
			delete mFinace;
			cout << "boss destructor" << endl;
		}
		//查看财务的函数
		void readFianace(int *array, int n)
		{
			cout << "boss readFianace" << endl;
			mFinace->caculateFinance(array, n);
		}
		//实现后的回调函数,这个函数就是用来接收回调的值的
		void setFinanceResult(int result) const
		{
			cout << "caculate result:" << result << endl;
		}
	private:
		Finance *mFinace;
	};
}
#endif

猜你喜欢

转载自blog.csdn.net/qq_39998031/article/details/88173576