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 函数基础 函数参数 函 ...
随机推荐
- 数组其他部分及java常见排序
数据结构的基本概述: 数据结构是讲什么,其实大概就分为两点: 1.数据与数据之间的逻辑关系:集合.一对一.一对多.多对多 2.数据的存储结构: 一对一的:线性表:顺序表(比如:数组).链表.栈(先进后 ...
- Go语言字符串
Go语言的字符串是一个用UTF-8编码的变宽字符序列,它的每一个字符都用一个或多个字节表示 . 在Go语言中,没有字符类型,字符类型是rune类型,rune是int32的别称.可使用 []byte() ...
- 分享一下Ubuntu好用的源
vim /etc/apt/sources.list 然后用G跳转到最后一行,然后[ESC]切换到命令行模式,然后键入[o](表示在当前行后插入).也可以多插入几个空行.这样可以有条理的和系统默认的区分 ...
- 剑指offer——链表
#include"stdio.h" #include"stdlib.h" #include"iostream" using namespac ...
- cv2.FileNode has no keys
把 python-opencv 版本由3.4.1 换成 3.4.4之后,问题解决
- 【CSS】CSS Sprites (CSS 精灵) 技术
CSS Sprites CSS Sprites在国内很多人叫css精灵,是一种网页图片应用处理方式.它允许你将一个页面涉及到的所有零星图片都包含到一张大图中去,这样一来,当访问该页面时,载入的图片就不 ...
- 【LESS系列】基本语法
这里将直接以实例的方式展示 LESS 的基本语法. less code 是编译前的代码,css code 是编译后的代码. 本文的内容,同样是引自[http://www.ibm.com/develop ...
- jdk 自动化脚本
添加没有登录权限 需要理解linux用户,首先登陆的是root用户,拥有所有的权限,但是该权限太大,一般都会分配其他用户使用,并且在部署程序时,需要分配一个没有登录权限的用户,这样改程序不能随意被修改 ...
- FocusBI: SQL Server内核
关注微信公众号:FocusBI 查看更多文章:加QQ群:808774277 获取学习资料和一起探讨问题. <商业智能教程>pdf下载地址 链接:https://pan.baidu.com/ ...
- 使用NDK编译含JNI的Android项目常见问题解决方案
有时候,自己下载的或者拷贝过来的JNI项目出现莫名错误,通常是找不到头文件,可能解决方案如下: Removing the C nature: The only way I could find to ...