一、类成员函数的回调

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. 大象——Thinking in UML

    目录 大象--Thinking in UML 面向对象 普通民众的面向对象 大师眼中的面向对象 大象--Thinking in UML 大音希声,大象希形, 近来闲暇,随手翻起一些曾经看过的书籍,才发 ...

  2. 02-线性结构3 Reversing Linked List (25 分)

    Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elem ...

  3. windows下hla编译环境配置(转)

    原文地址:http://blog.chinaunix.net/uid-20548989-id-1667169.html HLA简介         HLA,英文"High Level Ass ...

  4. chromedriver for mac

  5. es第十篇:Elasticsearch for Apache Hadoop

    es for apache hadoop(elasticsearch-hadoop.jar)允许hadoop作业(mapreduce.hive.pig.cascading.spark)与es交互. A ...

  6. UUID生成工具

    public class UUIDUtils { private static SecureRandom SEEDER_STATIC = null; private static byte[] ADD ...

  7. php session的简单使用

    创建session: session_start(); $_SESSION['name'] = $value; 获取session: session_start(); echo $_SESSION[' ...

  8. EC2 Instance扩容EBS卷容量

    EC2实例运行一段时间后,由于日志和一些应用程序数据的积累,可能出现之前预留的磁盘容量不够需要扩容的情况.AWS EBS目前还不支持在线扩容,不过可以通过结合snapshot来实现. 如,我的EC2 ...

  9. Missy

    毕业两年了,非常怀念大学生活.有时间还想回去看看,为什么我的眼里常含着泪水,因为我对这片土地爱的深沉. 你问我大学时最后悔的事情是什么,可能是没有对她说 I like you 吧,至今偶尔也会想起她. ...

  10. android webview 中 js 模板引擎的使用

    最近在项目中要求用 webview 展示几个界面, 而后台返回的不是 html 而是 json 数据. 起初用 StringBuilder 一个一个拼 html, 后来感觉太繁琐,拼一个还行,拼多了就 ...