0
点赞
收藏
分享

微信扫一扫

C++核心编程--函数指针与回调函数

C++核心编程--函数指针与回调函数_调用函数1,函数指针的基本使用

函数指针的声明:

声明普通指针时,必须提供​指针的类型​。同样,声明函数指针时,也必须提供​函数类型​,既是 ​返回值​和​参数列表​。

函数指针特点:

  • 指针的返回值与函数返回值相同
  • 参数列表相同

返回值和参数列表相同可以认为他们的函数类型相同

int func1(int a,string b)
int func2(int c,string d)
int func3(int g,string sd)

bool func4(int sj ,string sdk)
bool func5(int dfjn)

函数指针的声明:

语法:返回值类型 (* 指针名 )(参数列表)

int  *pfa)(int ,string);
bool *lis)(int a,string c)
bool (*shi)(int)

具体实现:

1声明函数指针

2指针名=函数名

3调用

C++写法:  p(o, sign);  

//c++写法
//声明一个函数指针.其返回值类型和参数列表要和被回调用的函数相同
void(*p)(int, string);
p = ThePsychic;
p(o, sign);

输出结果C++核心编程--函数指针与回调函数_函数的提高_02

C语言的写法:(*p)(o, sign)  

//C语言写法
//声明一个函数指针.其返回值类型和参数列表要和被回调用的函数相同
void(*p)(int, string);
p = ThePsychic;
(*p)(o, sign)

输出结果:C++核心编程--函数指针与回调函数_函数指针_03

代码示例:

#include<iostream>
using namespace std;

//函数指针和回调函数的语法

//算命函数,算出幸运数字和星座
void ThePsychic(int a,string c)
{
cout << "他的幸运数字是: " << a <<endl
<< "他的星座是: " << c << endl;

}


int main()
{
int o = 0;
string sign = "水瓶座";
//常规的调用
ThePsychic(o, sign);


//声明一个函数指针.其返回值类型和参数列表要和被回调用的函数相同
void(*p)(int, string);

// 语法: 函数指针名 = 需要回调的函数名;然后用指针名调用即可

//用函数指针的方式调用
p = ThePsychic;

p(o, sign); //C++调用写法


(*p)(o, sign); //C语言写法


system("pause");
}

2函数指针调用函数

优点:

(1)可以提高程序的编译效率和执行速度,使程序更加简洁。

(2)通过指针被调用函数可以向调用函数处返回除正常的返回值之外的其他数据,从而实现两者间的双向通信。

(3)利用指针可以实现动态内存分配。

以上来自百度

  • 我个人总结一点:就是函数指针调用函数,使得函数封装成一个框架或者模板,方便复用性也方便具体的调用

举个例子:

利用函数指针,写一个算命函数。算命大概的通用流程无非是 : 看手相--看面向--一些交谈等。

那么我们就用函数指针的方式将其封装成一个算命函数里面包括一些通用流程。

张三来了就给张三算,李四来了就给李四算。但每个人的需求可能不同,有的是来算桃花运,有的是来算财运....

将具体的个人需求传入到算命函数中,管他算什么都走算命流程就行了,大师都能算

#include<iostream>
using namespace std;

void Tony()
{
cout << "我叫托尼,是一名理发师,找大师算一算今年的财运" << endl;
}

void Mike()
{
cout << "我是麦克,想算一算桃花运" << endl;
}

void ThePsychic(void (*p)() )
{
cout << "算命先生已经到位" << endl;

p();

cout << "请伸出你的左手,进行看手相" << endl;
cout << "已经算完" << endl;
}

int main()
{
ThePsychic(Tony);

ThePsychic(Mike);

system("pause");
}

输出结果:C++核心编程--函数指针与回调函数_调用函数_04

举报

相关推荐

0 条评论