C++基础--回调的应用
一、类成员函数的回调
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++基础--回调的应用的更多相关文章
- java基础-回调函数(callback)
		
java基础-回调函数(callback) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数 ...
 - nodejs基础 -- 回调函数
		
Node.js 异步编程的直接体现就是回调. 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了. 回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都 ...
 - (数据科学学习手札104)Python+Dash快速web应用开发——回调交互篇(上)
		
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...
 - 从零开始搭建架构实施Android项目
		
我们先假设一个场景需求:刚有孩子的爸爸妈妈对用照片.视频记录宝宝成长有强烈的意愿,但苦于目前没有一款专门的手机APP做这件事.A公司洞察到市场需求,要求开发团队尽快完成Android客户端的开发.以下 ...
 - 操刀 requirejs,自己动手写一个
		
前沿 写在文章的最前面 这篇文章讲的是,我怎么去写一个 requirejs . 去 github 上fork一下,顺便star~ requirejs,众所周知,是一个非常出名的js模块化工具,可以让你 ...
 - Android RIL的java框架
		
Android RIL的Java部分也被分为了两个模块,RIL模块与Phone模块.其中RIL模块负责进行请求以及相应的处理,它将直接与RIL的原声代码进行通信.而Phone模块则向应用程序开发者提供 ...
 - node.js基础 1之 HTTP事件回调进阶(HTTP模块)
		
HTTP概念进阶 1. 什么是回调? 回调是异步编程时的基础,将后续逻辑封装成起始函数的参数,逐层嵌套 2. 什么是同步/异步? 同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯 ...
 - Node.js系列基础学习-----回调函数,异步
		
Node.js基础学习 Node.js回调函数 Node.js异步编程的直接体现就是回调,异步编程依托回调来实现,但不是异步.回调函数在完成任务后就会被调用,Node有很多的回调函数,其所有的API都 ...
 - 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数
		
[源码下载] 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数 作者:webabcd 介绍速战速决 之 PHP 函数基础 函数参数 函 ...
 
随机推荐
- Kettle 行列互换之——行转列(多列数据合并成一列变为多行)
			
原始需求如下: 业务系统设置成这样,见截图. 工资项目为了方便录入,都是做成列的. 但是这些数据需要和另外的费用报销系统的数据关联,费用报销系统的费用项目是横向的,用费用项目.金额的多行来表达.那么这 ...
 - Jmeter打开url时提示“请在微信客户端打开链接问题”
			
前提: 1.HTTP信息头管理器已添加了“User-Agent” 2.工作台添加HTTP代理服务器(注意端口和客户端填写的代理端口要一致) 但是运行的时候总是提示“请在微信客户端打开链接” 查阅各种资 ...
 - AS添加依赖库提示Manifest merger failed解决办法
			
今天在学习<Android权威编程指南>时 在project structure中添加recyclerview时提示错误 按照提示添加tools:replace标签还是报错 然后切换至bu ...
 - Pycharm快捷键配置
			
1.主题 毫无疑问Pycharm是一个具有强大快捷键系统的IDE,这就意味着你在Pycharm中的任何操作,例如打开一个文件.切换编辑区域等,都可以通过快捷键来实现.使用快捷键不仅能提高操作速度,看起 ...
 - dockerfile封装docker镜像
			
一.使用都dockerfile封装docker镜像 1.在任意一个地方创建文件夹docker mkdir docker 2.进入文件夹并且下载一个django2.1.7的包以及一个epel.repo ...
 - scrapy抓取中文后乱码解决方法
			
出现这种东西不是乱码,是unicode,只是人看不懂,例如: \u96a8\u6642\u66f4\u65b0> \u25a0\u25a0\u25a 我们把他解码成中文码即可,在settings ...
 - Servlet验证
			
一.servlet代码 二.验证 三.总结 在这个servlet验证过程当中,主要是解码方式的运用,特别是输入中文时容易出现乱码.在表单的action中需要输入路径. 四.网盘 链接:https:// ...
 - JWT(Json Web Token)初探与实践
			
前言什么是JWT?为什么使用JWT?什么时候使用JWT?JWT的基本结构HeaderPayloadSignature将他们放在一起项目实践JWT后端前端关于安全性总结参考 协议标准:https://t ...
 - new Map的妙用
			
const actions = new Map([ [1, ['processing','IndexPage']], [2, ['fail','FailPage']], [3, ['fail','Fa ...
 - table定位
			
Table定位 在 web 页面中经常会遇到 table 表格,特别是后台操作页面比较常见.本篇详细讲解 table 表格如何定位. 1.1 table特性 1.table 页面查看源码一般有这几个明 ...