c回调函数:回调函数之C++版

回调函数这个东西使用得比较多,其实所谓的回调函数就是函数指针,但在面向对象编程中,往往我们会使用他们达到很巧的目的,比如说类的封装中;或者用得更多的是实现动态绑定;呵呵这不是C++中传说的多态吗,,www. .
先来个简单的介绍函数指针:


Copycode

#include<iostream>
typedefint(*callback)(int);
usingnamespacestd;
classX
{
protected:intxx;
public:
X()
{
xx=11;
//hh=22;
}
staticintget_hh(inta)
{
cout<<\"函数get_hh\"<<endl;
returna;
}
};
classY
{
private:intxx;
XX_class;
callbacklp;
public:
Y()
{
xx=7;
}
inthehe(callbacklp)
{
lp(xx);
returnxx;
}
voidxixi()
{
lp=&X::get_hh;
}
};
intf_xx(inta)
{
cout<<\"这是全局函数f_xx:\"<<a<<endl;
returna;
}
intmain(intargc,char*argv[],charenv[])
{
intxx;
callbacklp;
xx=111;
cout<<\"呵呵!!\"<<endl;
cout<<\"第一步:函数指针\"<<endl<<\"---------------------------------------------------------\"<<endl;
lp=&X::get_hh;
cout<<\"这就是函数指针直接调类中的静态成员函数get_xx:\"<<endl;
cout<<lp(xx)<<endl;
lp=&f_xx;
cout<<\"这就是函数指针直接全局函数f_xx:\"<<lp(xx)<<endl;
cout<<\"第二步:跨类回调\"<<endl<<\"---------------------------------------------------------\"<<endl;
YY_class;
lp=&X::get_hh;
cout<<\"这就是在Y类中调用了X类中的方法\"<<endl;
cout<<Y_class.hehe(lp)<<endl;
cin>>xx;
return0;
}



主要需要注意的是在使用函数指针的时候,如果指向的函数是在某个类中,则该函数必须是静态成员函数
还有函数指针的申明格式,怪怪的哈,呵呵用多了就不觉得了,接下来我们用它来干点面向对象因该干的事情:

Copycode

include<iostream>
usingnamespacestd;
typedefint(*callback)(int);
classX
{
public:
intX_test(callbacklp,inta)
{
a--;
cout<<\"执行回调函数的之前,传入参数变成:\"<<endl;
cout<<a<<endl;
a=lp(a);
cout<<\"执行回调函数的之后,传入参数变成:\"<<endl;
cout<<a<<endl;
returna;
}
};
classY
{
protected:intxx;
private:XX_class;
callbacklp;
public:
Y(inta)
{
xx=a;
}
staticinthehe(inta)
{
for(inti=1;i<=10;i++)
{
a++;
}
returna;
}
voidxixi()
{
Xc_x;
lp=&hehe;
xx=c_x.X_test(lp,xx);
cout<<\"最终结果传到Y类中的xx变成了:\"<<endl;
cout<<xx<<endl;
}
};
intmain(intargc,char*argv[],charenv[]) [Page]
{
intxx;
Y*y_c=newY(100);
y_c->xixi();
return0;
}




这样在X类中使用了Y类中的方法,现在我们的X类只是做加法,而减法放在了Y类中.当然这个只是为了便于理解才简化的,只是一个类比,比如一个类实现数据处理而另外一个实现视图处理.是不是??
Tags:  vc回调函数 什么是回调函数 回调函数 c回调函数

延伸阅读

最新评论

发表评论