25.回调函数

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

回调函数对于我们的意义

  1. 延迟执行函数逻辑。
  2. 让回调执行的逻辑可以变化!

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

×

喜欢就点赞,疼爱就打赏