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 函数基础 函数参数 函 ... 
随机推荐
- 虚拟机上使用 opecnv 读取USB摄像头无法显示
			使用opecv读取USB摄像头时候,无法显示图像. 设置 首先查看虚拟机Ubuntu检测摄像头是否已正常插入: ls /dev/video* 结果为: 设置虚拟机USB属性: USB的兼容性设置为US ... 
- pycharm下运行unittest的问题
			环境: 系统:window7 64 软件:pycharm 版本:2016.3.2 问题描述: 使用unittest类的时候出现问题,问题截图如下 Pycharm 2016.2执行单元测试遇到如下问题: ... 
- (转载)一位资深程序员大牛给予Java初学者的学习建议
			这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议? 今天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈每个阶段要 ... 
- 安装Termux的手机上运行Python
			1. Termux 终端 Android是一个单用户图形化系统,功能主要以应用的形式呈现给用户,因此在系统上我们无法直接获取终端,更是无法直接调用系统自带的丰富指令.使用ADB是一个曲线救国的方法,打 ... 
- 显示point data的时均值注意事项
			正确的导入顺序应该是: 先导入cell data,再做时均处理,最后再转换成point data.如果先转换成point data再做时均处理,速度会非常慢. 
- 论文阅读 | CenterNet:Object Detection with Keypoint Triplets
			相关链接 论文地址:https://arxiv.org/abs/1904.08189 代码链接:https://github.com/Duankaiwen/CenterNet 概述 CenterNet ... 
- python安装方法
			1.下载Python安装包 2.配置环境变量 path=%path%;C:\Python27 3.安装pip 默认已安装 4.配置pip环境变量 path=%path%;C:\Python27\Scr ... 
- python API url 级联生成
			参考了一下公司 python 达人 rpc 接口级联 api 调用 rpc.api.users.list() rpc.api.login(username='',password='') rpc['a ... 
- jreble安装 in idea
			http://www.cnblogs.com/littlehb/archive/2013/04/19/3031045.html 
- Tcp参数优化
			net.core.netdev_max_backlog = 400000 #该参数决定了,网络设备接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目. net.core.opt ... 
