一、类成员函数的回调

1. 类成员函数的回调,函数的调用必须通过类来调用;

CallBack.h

#pragma once

class CallBack
{
public:
CallBack();
~CallBack();
typedef void (CallBack::*pFunc)(int);
void printFunc(int x);
void FuncCall(CallBack *obj, CallBack::pFunc p);
};

 CallBack.cpp

#include "CallBack.h"
#include <stdio.h> CallBack::CallBack()
{
} CallBack::~CallBack()
{
} void CallBack::printFunc(int x)
{
printf("CALLBACK x value is %d\n", x);
} void CallBack::FuncCall(CallBack *obj, CallBack::pFunc p)
{
int x = ;
(obj->*p)(x);
}

main.cpp

#include "CallBack.h"

int main()
{
CallBack *cb = new CallBack();
cb->FuncCall(cb, &CallBack::printFunc); return ;
}

运行结果为:

二、静态函数的回调

注意:1. 静态函数只能在声明这个函数的文件中调用;

CallBack.h

#pragma once

typedef void(*pFunc)(int);
static void printFunc(int x);
void FuncCall(pFunc p, int x);
void excute(int x);

CallBack.cpp

#include "CallBack.h"
#include <stdio.h> static void printFunc(int x)
{
printf("CALLBACK x value is %d\n", x);
} void FuncCall(pFunc p, int x)
{
(*p)(x);
} void excute(int x)
{
FuncCall(printFunc, x);
}

main.cpp

#include "CallBack.h"

int main()
{
int x = ;
excute(x);
return ;
}

运行结果为:

三、回调函数在继承里的应用

Base.h

#pragma once
class CBase
{
public:
CBase();
virtual ~CBase(); char* x;
typedef void (CBase::*pFunc)();
virtual void printX();
void FuncCall(CBase* bs, pFunc p);
};

Base.cpp

#include "Base.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h> CBase::CBase()
{
x = NULL;
x = (char*)calloc(, );
strcpy_s(x, , "Base X\n");
} CBase::~CBase()
{
} void CBase::printX()
{
printf_s("BASE %s", x);
} void CBase::FuncCall(CBase *obj, CBase::pFunc p)
{
(obj->*p)();
}

CallBack.h

#pragma once
#include "Base.h" class CallBack:public CBase
{
public:
CallBack();
~CallBack(); virtual void printX();
};

CallBack.cpp

#include "CallBack.h"
#include <stdio.h>
#include <string.h> CallBack::CallBack()
{
} CallBack::~CallBack()
{
} void CallBack::printX()
{
strcpy_s(x, , "EXTERN x");
printf_s("EXTERN %s", x);
}

main.cpp

#include "CallBack.h"
#include "Base.h" int main()
{
CBase *b = new CallBack();
b->FuncCall(b, &CBase::printX);
return ;
}

运行结果:

C++基础--回调的应用的更多相关文章

  1. java基础-回调函数(callback)

    java基础-回调函数(callback) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数 ...

  2. nodejs基础 -- 回调函数

    Node.js 异步编程的直接体现就是回调. 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了. 回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都 ...

  3. (数据科学学习手札104)Python+Dash快速web应用开发——回调交互篇(上)

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...

  4. 从零开始搭建架构实施Android项目

    我们先假设一个场景需求:刚有孩子的爸爸妈妈对用照片.视频记录宝宝成长有强烈的意愿,但苦于目前没有一款专门的手机APP做这件事.A公司洞察到市场需求,要求开发团队尽快完成Android客户端的开发.以下 ...

  5. 操刀 requirejs,自己动手写一个

    前沿 写在文章的最前面 这篇文章讲的是,我怎么去写一个 requirejs . 去 github 上fork一下,顺便star~ requirejs,众所周知,是一个非常出名的js模块化工具,可以让你 ...

  6. Android RIL的java框架

    Android RIL的Java部分也被分为了两个模块,RIL模块与Phone模块.其中RIL模块负责进行请求以及相应的处理,它将直接与RIL的原声代码进行通信.而Phone模块则向应用程序开发者提供 ...

  7. node.js基础 1之 HTTP事件回调进阶(HTTP模块)

    HTTP概念进阶 1. 什么是回调? 回调是异步编程时的基础,将后续逻辑封装成起始函数的参数,逐层嵌套 2. 什么是同步/异步? 同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯 ...

  8. Node.js系列基础学习-----回调函数,异步

    Node.js基础学习 Node.js回调函数 Node.js异步编程的直接体现就是回调,异步编程依托回调来实现,但不是异步.回调函数在完成任务后就会被调用,Node有很多的回调函数,其所有的API都 ...

  9. 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数

    [源码下载] 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数 作者:webabcd 介绍速战速决 之 PHP 函数基础 函数参数 函 ...

随机推荐

  1. Schema Workbench 启动慢

    原始是JDBC连接设定的时候需要在参数中增加下列选项 FILTER_SCHEMA_LIST 官方的解释是 就是去搜寻连接数据库的所有的表结构,表越大越慢. 也要把这选项去除,保存数据库链接,并重新登录 ...

  2. tomcat正常启动后http://localhost:8080/报错404

    病症: tomcat在eclipse里面能正常启动,而在浏览器中访问http://localhost:8080/不能访问,且报404错误.同时其他项目页面也不能访问.关闭eclipse里面的tomca ...

  3. StringBuffer与StringBuilder的区别比较

    关于AbstractStringBuilder 首先通过查看源码发现,StringBuffer与StringBuilder都继承自AbstractStringBuilder抽象类.而AbstractS ...

  4. es6 简单封装一个 省市县三级下拉框

    废话不多说,直接上效果图和代码: 1,index.js function $(el){ return document.getElementById(el) } let render = Symbol ...

  5. springMvc 中返回字符串 乱码解决

    /** * produces=MediaType.APPLICATION_JSON_VALUE+";charset=utf-8" 乱码解决 * @param callback * ...

  6. [转] Java 命令行交互-JCommander

    [From] https://github.com/Sayi/sayi.github.com/issues/32 我喜欢简单,什么是简单?正如若干字符组成的命令行. 有时候我们用Java开发了一个小工 ...

  7. 反弹shell集锦

    1.   关于反弹shell 就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端.reverse shell与telnet,ssh等标准shell对应,本质 ...

  8. Mongodb利用aggregation实现抽样查询(按记录数和时间)

    之前对mongodb不熟,但是项目要用,因为数据量比较大,并且领导要实现抽样查询,控制数据流量,所以自己研究了下,亲测可用,分享一下! 话不多说,上代码: 第一种方案:加自增主键,实现按记录数抽样 1 ...

  9. 常用linux网络工具

    iftop netstat nethogs可以查看进程占用网络的情况 nc -u -z -w2 192.168.0.1 1-1000 //扫描192.168.0.3 的端口 范围是 1-1000

  10. Django级联删除的选项

    Django级联删除的选项 Django模型中的on_delete属性具有如下选项: CASCADE 级联删除,也就是被引用的实体被删除后,相关的记录信息都会被删除. PROTECT 阻止删除被引用的 ...