指向Member Function的指针
1.所有的nonstatic member functions 都需要对象的地址
取一个nonstatic member functions的地址,如果该函数不是虚函数,得到的结果是他在内存中的真正地址。但是这个值也是不完全的,它必须被绑定与某个class object的地址上,才能调用该函数。
2.一个简单的demo
class Test
{public:void Fun1(void) { cout << "Fun1" << endl; }void Fun2(void) { cout << "Fun2" << endl; }
};
int main()
{void (Test:: *pFun)(void) = &Test::Fun1;//pFun();ERRORTest a;(a.*pFun)();
这些操作会被编译器转化为 (pFun)(&a)
3.支持指向virtual Member Function的指针
(一)支持指向"Virtual member Functions"之指针
对一个virtual member function取其地址,所获得的是一个索引值。上述调用会被内化为一个编译期的式子:
(*ptr->vptr[(int)ptr_fun])(ptr);
编译器必须能够区分:ptr_fun代表内存地址还是Virtual table中的索引值。
指向Member Function的指针相关推荐
- 成员函数指针与高性能的C++委托 (Member Function Pointers and the Fastest Possible C++ Delegates)...
标准C++中没有真正的面向对象的函数指针.这一点对C++来说是不幸的,因为面向对象的指针(也叫做"闭包(closure)"或"委托(delegate)")在一些 ...
- C++教程:指向成员函数的指针
转载自:https://kelvinh.github.io/blog/2014/03/27/cpp-tutorial-pointer-to-member-function/ Kelvin的胡言乱语 = ...
- [C++]Call virtual member function in constructor or destructor
嗷嗷按,今天被问到在constructor/destructor中调用virtual member function的问题.答错了,很羞耻. 依稀记得在constructor/destructor调用 ...
- C语言,函数不可返回指向栈内存的指针
预备知识:内存的分类 C/C++程序占用的内存分为两大类:静态存储区与动态存储区.其示意图如下所示: 数据保存在静态存储区与动态存储区的区别就是:静态存储区在编译-链接阶段已经确定了,程序运行过程中不 ...
- error: reference to non-static member function must be called sort(nums.begin(),nums.end(),cmp1)
leetcode179题中编译出现则个问题 出错的代码: class Solution { public:bool cmp1(const int& a, const int& b){s ...
- 提示illegal reference to data member'CPMAgentManageDlg::m_matrixMatrixSt'in a static member function
当提示"illegal reference to data member'CPMAgentManageDlg::m_matrixMatrixSt'in a static member fun ...
- C/C++编程:reference to non-static member function must be called
主要原因是我使用了函数指针,而函数指针所指函数须得是静态才行 错误代码: class Solution {public:string ReverseSentence(string str) {type ...
- [Error] cannot call member function ‘‘ without object
今天遇到一个错误 [Error] cannot call member function 'int Computer::getCnt()' without object 意思是不能在没有对象的情况下, ...
- C语言结构体的定义与使用、结构体数组、指向结构体的指针(有代码详解)
1.结构体的定义与使用 结构体是一种构造数据类型 把不同类型的数据组合成一个整体 结构体的定义形式: struct 结构体名{结构体所包含的变量或数组 }; 结构体是一种集合,它里面包含了多个变量或数 ...
- C++:将char*指针强制转换成一个指向结构体的指针
在使用Socket与雷达进行通信采集数据时,会遇到"打包与解包"的问题,在打包和解包过程中,会涉及到结构体指针与字符指针间的强制转换.如下: 打包就是将包头与信息封装成一定大小的包 ...
最新文章
- TCP/IP 笔记 - TCP连接管理
- Py之cv2:cv2库(OpenCV,opencv-python)的简介、安装、使用方法(常见函数、方法等)最强详细攻略
- JavaScript之自定义对象
- CVE-2020-0796复现(poc+exp)
- 简易的实现对象内存池
- c++中带返回值函数没写return能通过编译但运行时会出现奇怪问题
- img打 webpack_webpack 打包js中的img路径问题
- java中参数“ ...“的用法和意思
- 移动HTML5前端性能优化指南
- go处理get、post请求返回的body数据
- 国内外智慧医疗云平台调研
- Python 监控linux之dstat
- 爬虫框架 Scrapy 详解
- mysql视图唯一id_Mysql的视图、存储过程、函数、索引全解析
- 将数据源的数据格式化显示,加上金额符号
- ffmpeg安装及在java中的使用案例
- 通过Vue+flvjs在HTML5中播放flv格式视频文件—demo及api
- java jzip_JAVA UI 实现ZIP的压缩与解压缩
- Java-UDP通信(实现多发多收、广播、组播)
- 精读-软件测试的艺术之调试,极限测试和因特尔应用系统的测试
热门文章
- php array函数 strpos strstr查找一个字符串是否在另外一个字符串中
- perl引用中的闭包closure
- 德宝怡高获批省大数据产业园
- SET FOREIGN_KEY_CHECKS = 0
- android使用protobuf实现网络订单管理功能
- JavaWeb初级篇-HttpPost使用教程
- 计算机网络物理结构两大部分组成,计算机网络的组成部分 -华强电子网
- vue上传图片时,console.log()图片信息遇到的坑
- 撤销工作表保护原密码_批量解除工作表保护,和批量执行保护一样简单
- JavaScript数据类型的隐式转换