函数指针

来源:互联网 发布:熟丝桃子圈微博全数据 编辑:程序博客网 时间:2024/06/06 01:05

函数对象:

定义:函数对象是一个普通的类对象,但是可以采用标准的函数调用语法来调用它的operator()成员。函数对象是比函数更加通用的概念,因为函数对象可以定义跨越多次调用的可持久的部分(类似静态局部变量),同时又能够从对象的外面进行初始化和检查(和静态局部变量不同). 

实现:函数对象重载函数调用操作符(),来创建类似于函数指针的东西。

            

#include <iostream>using namespace std;class fib{public:fib():a(1),b(1){};int operator()(void);private:int a;int b;};int fib::operator()(void){int temp = 0;a = b;a = temp + a ;return temp;};int main(){fib fi;cout << fi() << fi() << endl; system("pause"); return 0;}

优势:函数对象可以携带附加数据,而函数指针不行

       让一个函数既可以接受函数对象,也可以接受函数指针,那么可以使用模板函数

#include <iostream>using namespace std;class big{public:big():a(1){};big(int a){this->a = a;}int operator()(int value);private:int a;};int big::operator()(int value){return value>a;};bool big5(int v){return v > 5;}template<typename T>int count_n(int *array,int size,T func){int count = 0;for (int i = 0 ;i < size ; i++){if(func(array[i])){cout << "array[" << i << "] = " << array[i] << endl; count ++ ;}}return count;};int main(){big fi=big();big xiao(8);   //需要定义构造函数 int array[5] = {4,9,3,7,5};cout << count_n(array,sizeof(array)/sizeof(int),big5) << endl;cout << count_n(array,sizeof(array)/sizeof(int),big(5)) << endl ;system("pause"); return 0;}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 高速超速记3分怎么办 高速超速记12分怎么办 过江隧道关闭了怎么办 高速限速60超了怎么办 超速扣了12分怎么办 上海 12分扣完了怎么办 狗抓伤只淌白沫怎么办 刑事案件法院迟迟不判决怎么办 法院判决书下来了没钱赔偿怎么办 被起诉开庭不去怎么办 地道塌陷造成房屋倒塌怎么办 海外看不了b站怎么办 最近脸胖了好多怎么办 最近胖了好多怎么办啊? 很瘦的人手胖怎么办 长得丑不敢相亲怎么办 abs抱死发不动了怎么办 qq飞车手游车到期了改装怎么办 育碧下载游戏慢怎么办 豹纹守宫鼻子还有个残皮怎么办 睫角守宫断尾怎么办 定金发票弄丢了怎么办 xp电脑显示输入不支持怎么办 月子见风怎么办暴雪将 老氏电视机出现雪花点怎么办 飞利浦电视显示雪花片怎么办 电视无信号出雪花怎么办 电视打开都是雪花没有电视台怎么办 电视视频1无信号怎么办 新买的电视无信号怎么办 卫星有信号没有视频怎么办 户户通没有信号怎么办视频 雪花泥粘衣服上怎么办 遗产按份额处分判决后怎么办 宝马后驱车下雪天怎么办 宝马后驱车路滑怎么办 车子陷入泥地里怎么办 深圳居住证签注过期了怎么办 手机不能播放视频乱码了怎么办 被加密的视频无法观看怎么办 苹果5忘记id密码怎么办