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的指针相关推荐

  1. 成员函数指针与高性能的C++委托 (Member Function Pointers and the Fastest Possible C++ Delegates)...

    标准C++中没有真正的面向对象的函数指针.这一点对C++来说是不幸的,因为面向对象的指针(也叫做"闭包(closure)"或"委托(delegate)")在一些 ...

  2. C++教程:指向成员函数的指针

    转载自:https://kelvinh.github.io/blog/2014/03/27/cpp-tutorial-pointer-to-member-function/ Kelvin的胡言乱语 = ...

  3. [C++]Call virtual member function in constructor or destructor

    嗷嗷按,今天被问到在constructor/destructor中调用virtual member function的问题.答错了,很羞耻. 依稀记得在constructor/destructor调用 ...

  4. C语言,函数不可返回指向栈内存的指针

    预备知识:内存的分类 C/C++程序占用的内存分为两大类:静态存储区与动态存储区.其示意图如下所示: 数据保存在静态存储区与动态存储区的区别就是:静态存储区在编译-链接阶段已经确定了,程序运行过程中不 ...

  5. 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 ...

  6. 提示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 ...

  7. C/C++编程:reference to non-static member function must be called

    主要原因是我使用了函数指针,而函数指针所指函数须得是静态才行 错误代码: class Solution {public:string ReverseSentence(string str) {type ...

  8. [Error] cannot call member function ‘‘ without object

    今天遇到一个错误 [Error] cannot call member function 'int Computer::getCnt()' without object 意思是不能在没有对象的情况下, ...

  9. C语言结构体的定义与使用、结构体数组、指向结构体的指针(有代码详解)

    1.结构体的定义与使用 结构体是一种构造数据类型 把不同类型的数据组合成一个整体 结构体的定义形式: struct 结构体名{结构体所包含的变量或数组 }; 结构体是一种集合,它里面包含了多个变量或数 ...

  10. C++:将char*指针强制转换成一个指向结构体的指针

    在使用Socket与雷达进行通信采集数据时,会遇到"打包与解包"的问题,在打包和解包过程中,会涉及到结构体指针与字符指针间的强制转换.如下: 打包就是将包头与信息封装成一定大小的包 ...

最新文章

  1. TCP/IP 笔记 - TCP连接管理
  2. Py之cv2:cv2库(OpenCV,opencv-python)的简介、安装、使用方法(常见函数、方法等)最强详细攻略
  3. JavaScript之自定义对象
  4. CVE-2020-0796复现(poc+exp)
  5. 简易的实现对象内存池
  6. c++中带返回值函数没写return能通过编译但运行时会出现奇怪问题
  7. img打 webpack_webpack 打包js中的img路径问题
  8. java中参数“ ...“的用法和意思
  9. 移动HTML5前端性能优化指南
  10. go处理get、post请求返回的body数据
  11. 国内外智慧医疗云平台调研
  12. Python 监控linux之dstat
  13. 爬虫框架 Scrapy 详解
  14. mysql视图唯一id_Mysql的视图、存储过程、函数、索引全解析
  15. 将数据源的数据格式化显示,加上金额符号
  16. ffmpeg安装及在java中的使用案例
  17. 通过Vue+flvjs在HTML5中播放flv格式视频文件—demo及api
  18. java jzip_JAVA UI 实现ZIP的压缩与解压缩
  19. Java-UDP通信(实现多发多收、广播、组播)
  20. 精读-软件测试的艺术之调试,极限测试和因特尔应用系统的测试

热门文章

  1. php array函数 strpos strstr查找一个字符串是否在另外一个字符串中
  2. perl引用中的闭包closure
  3. 德宝怡高获批省大数据产业园
  4. SET FOREIGN_KEY_CHECKS = 0
  5. android使用protobuf实现网络订单管理功能
  6. JavaWeb初级篇-HttpPost使用教程
  7. 计算机网络物理结构两大部分组成,计算机网络的组成部分 -华强电子网
  8. vue上传图片时,console.log()图片信息遇到的坑
  9. 撤销工作表保护原密码_批量解除工作表保护,和批量执行保护一样简单
  10. JavaScript数据类型的隐式转换