25.指针-指针和函数-回调函数
25.1 知识点
回调函数是什么
回调函数(Callback Function)是指通过函数指针将一个函数的地址传递给另一个函数,并在合适的时机调用该函数。它通常用于延迟执行某些逻辑。
说人话:
回调函数就是一个函数作为参数传递给另一个函数,并在后者执行过程中调用前者的一种用法。可以理解为先记录某一个函数,过一会儿再调用。相当于“一会儿回头再调用”的函数。
如何使用回调函数
回调函数的使用方法是将函数指针作为某个函数A的参数,当调用函数A时,将函数作为参数进行传递。那么这个被传递的函数指针就可以称为回调函数。
void doSomthing(void (*func_ptr)())
{
cout << "doSomthing要提前执行的逻辑" << endl;
// 执行传入的回调函数
func_ptr();
}
void laterDoSomthing()
{
cout << "晚点才会执行的逻辑" << endl;
}
void laterDoSomthingOther()
{
int a = 666;
int b = 999;
cout << "晚点才会执行的其他逻辑" << a + b << endl;
}
void doSomthing2(int a, int b, void (*fun_ptr)(int))
{
fun_ptr(a + b);
}
void laterDoSomthing2(int i)
{
cout << "晚点才会执行的带参数的回调函数" << endl;
cout << i / 4.0f << endl;
}
传入的 laterDoSomthing
函数就可以称为回调函数,因为它会在另一个函数中被调用。具体的调用时机是由另一个函数中的逻辑决定。
doSomthing(laterDoSomthing);
// doSomthing要提前执行的逻辑
// 晚点才会执行的逻辑
doSomthing(laterDoSomthingOther);
// doSomthing要提前执行的逻辑
// 晚点才会执行的其他逻辑1665
doSomthing2(5, 7, laterDoSomthing2);
// 晚点才会执行的带参数的回调函数
// 3
doSomthing2(666, 999, laterDoSomthing2);
// 晚点才会执行的带参数的回调函数
// 416.25
回调函数对于我们的意义
- 延迟执行函数逻辑。
- 让回调执行的逻辑可以变化!
25.2 知识点代码
Lesson25_指针_指针和函数_回调函数.cpp
#include <iostream>
using namespace std;
void doSomthing(void (*func_ptr)());
void laterDoSomthing();
void laterDoSomthingOther();
void doSomthing2(int a, int b, void (*fun_ptr)(int));
void laterDoSomthing2(int i);
int main()
{
std::cout << "回调函数\n";
//传入的该laterDoSomthing函数,就可以称为回调函数 因为它会在另一个函数中被调用
//具体调用时机 是由另一个函数中逻辑决定
doSomthing(laterDoSomthing);
//doSomthing要提前执行的逻辑
//晚点才会执行的逻辑
doSomthing(laterDoSomthingOther);
//doSomthing要提前执行的逻辑
//晚点才会执行的其他逻辑1665
doSomthing2(5, 7, laterDoSomthing2);
//晚点才会执行的带参数的回调函数
//3
doSomthing2(666, 999, laterDoSomthing2);
//晚点才会执行的带参数的回调函数
//416.25
}
#pragma region 知识点一 回调函数是什么
//回调函数(Callback Function)
//是指通过函数指针将一个函数的地址传递给另一个函数
//并在合适的时机调用该函数,它通常用于延迟执行某些逻辑
//说人话:
//回调函数就是 一个函数作为参数传递给另一个函数,并在后者执行过程中调用前者 的一种用法
//先记录某一个函数,过一会儿再调用
//相当于 一会儿回头再调用 的函数
#pragma endregion
#pragma region 知识点二 如何使用回调函数
//将函数指针作为某一个函数A的参数,当调用函数A时,将函数作为参数进行传递
//那么这个被传递的函数指针就可以称为回调函数了
//有一个函数指针作为参数的函数,那么传入的这个函数指针 我们一般就称它为回调函数
void doSomthing(void (*func_ptr)())
{
cout << "doSomthing要提前执行的逻辑" << endl;
//执行传入的回调函数
func_ptr();
}
void laterDoSomthing()
{
cout << "晚点才会执行的逻辑" << endl;
}
void laterDoSomthingOther()
{
int a = 666;
int b = 999;
cout << "晚点才会执行的其他逻辑" << a + b << endl;
}
void doSomthing2(int a, int b, void (*fun_ptr)(int))
{
fun_ptr(a + b);
}
void laterDoSomthing2(int i)
{
cout << "晚点才会执行的带参数的回调函数" << endl;
cout << i / 4.0f << endl;
}
#pragma endregion
#pragma region 知识点三 回调函数对于我们的意义
// 1.延迟执行函数逻辑
// 2.让回调执行的逻辑可以变化!
#pragma endregion
25.3 练习题
声明一个函数,该函数可以传入两个回调函数(无参无返回)和一个数值,当这个值小于50时回调第一个,大于等于50时回调第一个
void test(void (*func1)(), void (*func2)(), int i)
{
if (i < 50)
func1();
else
func2();
}
void func1()
{
cout << "小于50" << endl;
}
void func2()
{
cout << "大于等于50" << endl;
}
test(func1, func2, 49); // 小于50
test(func1, func2, 51); // 大于等于50
25.4 练习题代码
Lesson25_练习题.cpp
#include <iostream>
using namespace std;
void test(void (*func1)(), void (*func2)(), int i);
void func1();
void func2();
int main()
{
std::cout << "回调函数 练习题\n";
test(func1, func2, 49);//小于50
test(func1, func2, 51);//大于等于50
}
#pragma region 练习题一
//声明一个函数,该函数可以传入两个回调函数(无参无返回)和一个数值,
//当这个值小于50时回调第一个,大于等于50时回调第一个
void test(void (*func1)(), void (*func2)(), int i)
{
if (i < 50)
func1();
else
func2();
}
void func1()
{
cout << "小于50" << endl;
}
void func2()
{
cout << "大于等于50" << endl;
}
#pragma endregion
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com