1. 指向类非静态成员的函数指针

声明: 指向类的成员函数的指针需要在指针前面加上类的类型,格式为:

typedef 返回值 (类名::*指针类型名)(参数列表);

赋值: 需要用类的成员函数地址赋值,格式为:

指针类型名  指针名 = &类名::成员函数名;

注意:赋值时&符号必须要加:不加&编译器会认为是在调用类的成员函数,所以需要给出参数列表,否则会报错;加&编译器才认为是要获取函数指针。

调用: 调用类对象.*; 调用类指针->*,格式为:

类对象: (类对象.*指针名)(参数列表);类指针: (类指针->*指针名)(参数列表);

代码示例:

#include <string>
#include <iostream>using namespace std;class MathCalculation
{
public:int add(int a,int b) //非静态函数{ return  a + b;}
};typedef int (MathCalculation::*FuncCal)(int,int);int main()
{FuncCal funAdd = &MathCalculation::add;MathCalculation * calPtr = new MathCalculation;int ret1 = (calPtr->*funAdd)(1,2);  //指针调用MathCalculation cal;int ret2 = (cal.*funAdd)(3,4);  //对象调用cout << "ret1 = " << ret1 << endl;cout << "ret2 = " << ret2 << endl;return 0;
}

2. 指向类静态成员的函数指针

类的静态成员函数和普通函数的函数指针的区别在于,他们是不依赖于具体对象的,所有实例化的对象都共享同一个静态成员,所以静态成员也没有this指针的概念。指向类的静态成员的指针就是普通的指针。非static的member function存在this指针,调用时需要传入该对象的地址,成员函数操作的是对象的数据。

#include <string>
#include <iostream>using namespace std;class MathCalculation
{
public:static int add(int a,int b) //静态函数{ return  a + b;}
};typedef int (*FuncCal)(int,int);int main()
{FuncCal funAdd = &MathCalculation::add;MathCalculation * calPtr = new MathCalculation;int ret1 = (*funAdd)(1,2);int ret2 = funAdd(3,3);cout << "ret1 = " << ret1 << endl;cout << "ret2 = " << ret2 << endl;return 0;
}

综上所述:

  • 类的静态成员函数,使用函数指针和普通函数指针无区别
  • 类的非静态成员函数,使用函数指针需要加类限制

C++中类成员函数指针使用方法相关推荐

  1. C++ 类成员函数指针的使用方法

    C++ 类成员函数指针的使用方法 #include <iostream>void func(){ std::cout << "void func()" &l ...

  2. 成员函数指针与高性能的C++委托(三)

    委托(delegate) 和成员函数指针不同,你不难发现委托的用处.最重要的,使用委托可以很容易地实现一个Subject/Observer设计模式的改进版[GoF, p. 293].Observer( ...

  3. 成员函数指针与高性能的C++委托

    成员函数指针与高性能的C++委托 http://www.cnblogs.com/jans2002/archive/2006/10/13/528160.html Member Function Poin ...

  4. C++学习之普通函数指针与成员函数指针

    http://blog.csdn.net/lisonglisonglisong/article/details/38353863 函数指针(function pointer)是通过指向函数的指针间接调 ...

  5. C++成员函数指针的应用

    转载:http://www.cppblog.com/colys/archive/2009/08/18/25785.html C++中,成员指针是最为复杂的语法结构.但在事件驱动和多线程应用中被广泛用于 ...

  6. 成员函数指针与高性能的C++委托(中篇)

    成员函数指针与高性能的C++委托(中篇) 撰文:Don Clugston (接上篇) 成员函数指针--为什么那么复杂? 类的成员函数和标准的C函数有一些不同.与被显式声明的参数相似,类的成员函数有一个 ...

  7. 成员函数指针与高性能的C++委托(下篇)

    成员函数指针与高性能的C++委托(下篇) 撰文:Don Clugston (接中篇) 委托(delegate) 和成员函数指针不同,你不难发现委托的用处.最重要的,使用委托可以很容易地实现一个Subj ...

  8. C++ 类的成员函数指针 ( function/bind )

    这个概念主要用在C++中去实现"委托"的特性. 但现在C++11 中有了 更好用的function/bind 功能.但对于类的成员函数指针的概念我们还是应该掌握的. 类函数指针 就 ...

  9. C++如何获取虚函数表(vtbl)的内容及虚成员函数指针存放原理

    一.前言 因为不同的运行环境的运行结果是不同的,特别是不同的编译器对c++类对象模型的实现是很可能存在差异,所以有时不同的编译平台的代码不能兼容也是部分原因于此.本文的运行环境是: ubuntu16. ...

最新文章

  1. python操作mongodb进行读写
  2. python 库整理:Timm(1)
  3. ORA-27300错误
  4. Pdftk - The PDF Toolkit
  5. phoenixframework自动化测试平台webUI代码示例
  6. 通俗认识理解OpenAI Five
  7. 如何用adb链接手机,并异常情况下的处理(转)
  8. java定义一个父类circle_[转载]java编程题全集一(答案)
  9. python assertequal_python – assertEqual – 两个相同的列表,为什么我得到奇怪的结果?...
  10. minigui 3.2.0:基于miniStudio应用TrueType字体的过程(1)
  11. 模拟外线O口呼入时,看不到来电显示号码?
  12. 入行程序员培训还是不培训
  13. 软件测试职业规划:发展方向多元化
  14. 《静态时序分析实用方法》翻译
  15. 浙大PTA数据结构与算法题目集(中文)题解集复习用
  16. 数字是有绝对值的,负数的绝对值是它本身取反,非负数的绝对值是它本身。 请定义一个方法,方法能够得到小数类型数字的绝对值并返回。 请定义方法并测试
  17. 用Python与Watson,将《魔戒》甘道夫的性格可视化!
  18. Python入门(二)——IDE选择PyCharm,输入和输出,基础规范,数据类型和变量,常量,字符串和编码,格式化
  19. Linux用户管理、组管理及权限管理
  20. 边缘保留滤波(EPF)

热门文章

  1. 非标资产与标准资产_资产商店行动新闻– 2011年10月!
  2. 退出cmd.exe或退出批处理文件
  3. 哲学家进餐问题(java模拟死锁及解决方案)
  4. base64加密原理详解
  5. 4.基于NIO的群聊系统
  6. 如何快速入门深度学习写论文?
  7. 【量化笔记】ARCH效应检验及GARCH建模的python实现
  8. matlab在axis,matlab中axis的用法
  9. 在Windows上挂载磁盘为非445端口的SAMBA服务(原创)
  10. 偏度与峰度(附python代码)