C++虚函数和函数指针一起使用,写起来有点麻烦。
下面贴出一份示例代码,可作参考。(需要支持C++11编译)
#include <stdio.h>
#include <list>
using namespace std; class VirtualWithCallBack {
public:
using CallBack = void(VirtualWithCallBack::*)(int); public:
virtual void testCallBack(int arg) = ; virtual CallBack getCallBack() const = ;
}; class VirtualWithCallBackSample1 : public VirtualWithCallBack {
public:
VirtualWithCallBackSample1() {
callBack = &VirtualWithCallBack::testCallBack;
} public:
void testCallBack(int arg) override {
printf("This is virtual call 1 : arg = %d\n", arg);
} CallBack getCallBack() const override {
return callBack;
} private:
CallBack callBack = nullptr;
}; class VirtualWithCallBackSample2 : public VirtualWithCallBack {
public:
VirtualWithCallBackSample2() {
callBack = &VirtualWithCallBack::testCallBack;
} public:
void testCallBack(int arg) override {
printf("This is virtual call 2 : arg = %d\n", arg);
} CallBack getCallBack() const override {
return callBack;
} private:
CallBack callBack = nullptr;
}; class VirtualCaller {
public:
void push(VirtualWithCallBack* callBack) {
callBackList.push_back(callBack);
} void run() {
for (auto r : callBackList) {
(r->*(r->getCallBack()))();
}
} private:
list<VirtualWithCallBack*> callBackList;
}; int main() {
VirtualCaller caller;
caller.push(new VirtualWithCallBackSample1());
caller.push(new VirtualWithCallBackSample2());
caller.run();
return ;
}
运行结果
本文由 哈萨雅琪 原创,转载请注明出处。
C++虚函数和函数指针一起使用的更多相关文章
-
C++虚函数和成员函数内存 this指针问题
father* p=new son; p->disp(...); 发现有好多人this指针的本质有错误的认识,估计不少人一说起this指针,脑袋立即反应出:那个类里使用的this指针,那么这个指 ...
-
C++中怎么获取类的成员函数的函数指针?
用一个实际代码来说明. class A { public: staticvoid staticmember(){cout<<"static"<<endl;} ...
-
12-返回指针的函数&;&;指向函数的指针
前言 接下来我只讲指针的最常见用法,比如这一章的内容----返回指针的函数 与 指向函数的指针 一.返回指针的函数 指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的. 返回 ...
-
C ~ 指针函数与函数指针的区别
一. 在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义: 1.指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某 ...
-
c语言指针函数与函数指针
例一:指针函数 指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某一类型的指针 类型标识符 *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个 ...
-
C++函数中那些不可以被声明为虚函数的函数
转自C++函数中那些不可以被声明为虚函数的函数 常见的不不能声明为虚函数的有:普通函数(非成员函数):静态成员函数:内联成员函数:构造函数:友元函数. 1.为什么C++不支持普通函数为虚函数? 普通函 ...
-
typedef 用法及 指针函数 和 函数指针
typedef 本质上是定义了一种新的类型, 该新类型可以原有类型的别名或是原有类型的组合. 而#define 只是字符串的替换. 如定义: typedef char* CHARP; 则 CHARP ...
-
thiscall仅仅应用于“C++”成员函数(this指针存放于CX寄存器,参数从右到左压)
_stdcall是Pascal程序的缺省调用方式,通常用于Win32 Api中,函数采用从右到左的压栈方式,自己在退出时清空堆栈.VC将函数编译后会在函数名前面加上下划线前缀,在函数名后加上" ...
-
C++ 友元函数的函数指针
成员函数的指针 讲友元之前先讲普通的成员函数的函数指针 class Std_interface { public: virtual void suspend() = 0; }; // define t ...
随机推荐
-
自学EF一些小笔记
一直在用DHhelper做MVC,感觉好山寨,也不怎么好用.决定开始学EF. 废话不多说开始记笔记..... EF就是把数据库表,存储过程,视图实例化,通过继承DbContext的一个类来操作数据实例 ...
-
强大的grep命令
1.作用 Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全 ...
-
powerdesign的license key到期,解决办法
到2013年9月24日为止我把这文件覆盖了都是行的!不行的请留言说明下! 下载地址:powerdesigner license key 15.1 找到安装目录,直接覆盖就行了!
-
【深入浅出jQuery】源码浅析2--使用技巧
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
-
洛谷 P3392 涂国旗
P3392 涂国旗 题目描述 某国法律规定,只要一个由N*M个小方块组成的旗帜符合如下规则,就是合法的国旗.(毛熊:阿嚏——) 从最上*干行(>=1)的格子全部是白色的. 接下来若干行(> ...
-
copyleft 与 copyright
直到今天才知道Copyleft这个名词(orz...) 我们经常能见到的是 Copyright(著作权),这个对版权的保护,保证作者权益. 它的对立面就是Copyleft,它允许用户*修改 使用作品 ...
-
【读书笔记】C++Primer---第三章
1.由于为了与C语言兼容,字符串字面值与标准库string类型不是同一种类型: 2.以下代码中,cin有几点需要注意:a.读取并忽略开头所有的空白字符(如空格.换行符.制表符):b.读取字符直至再次遇 ...
-
[PyData] 02 - Data Preprocessing and Cleaning
From: DBWangGroup 基于该系列代码的实践与补充思考. 补充:特征工程 http://www.cnblogs.com/jasonfreak/category/823064.html & ...
-
ES6之导入模块时的内存共享
项目结构 主页面 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> &l ...
-
mRemoteNG
mRemoteNG 1.摆脱了mstsc那种一个程序一个界面的模式,采用了左边树+右边Tab页的显示形式,让你在一个mRemote界面中,可以连接多个远程桌面,再也不用为切来切去而烦恼了(如上图). ...