1、函数指针

函数指针:即可以指向函数地址的指针,经常被用作函数参数,作为回调函数使用。

既然是函数指针,那么肯定与普通函数有关联的,即返回值以及函数的参数列表与普通函数一致。

假设我们构造一个a+b返回c的一个函数,我们对此构造一个指向他的函数指针。

int sum(int a,int b)
{return a + b;
}// 指向sum的函数指针
int (*pfunc)(int, int) = ∑

为了方便起见,我们会将函数指针构造成一个函数指针的类型。

// 构造一个类型为pfunc_ptr的函数指针类型
typedef int (*pfunc_ptr)(int, int);
// 指向一个函数
pfunc_ptr ptr = ∑  // 不用&也是可以的

测试例子

#include "stdfax.h"/*global function
*/
int sum(int a,int b)
{return a + b;
}int pro(int a, int b)
{return a * b;
}double half(double d)
{return d / 2.0;
}double twice(double d)
{return d * 2.0;
}extern void start_test();void test_global_func()
{//int sum(int, int);//int pro(int, int);int (*pfunc)(int, int) = ∑pfunc = &pro;  // this is the proper way of function assignmentpfunc = pro;   // this is allowed//double half(double);//double twice(double);// dfunc is called function pointer variabledouble (*dfunc)(double) = ½dfunc = twice;cout << dfunc(10) << endl;typedef int intg_t;intg_t a = 5;double(*pd)(double);pd = ½typedef double (*pdptr_t)(double);pdptr_t pdd = &twice;pdd = half;
}int main()
{int (*pfunc_ptr)(int a, int b);pfunc_ptr = ∑int a = pfunc_ptr(1, 2);std::cout << "a = " << a << endl;pfunc_ptr = &pro;int d = pfunc_ptr(3, 4);std::cout << "d = " << d << std::endl;start_test();return 0;
}

2、成员函数指针

成员函数指针与函数指针有一些区别,函数指针构造的函数是全局区域的,而成员函数指针构造的函数是属于类作用域的。

我们可以仿照函数指针来构建成员函数指针。

int (Vector::*pmemfunc_ptr)(int , int );
pmemfunc_ptr = &Vector::sum;  // 必须使用取地址符
// 调用的时候必须使用类成员变量来调用
Vector vec;
int ret = (vec.*pmemfunc_ptr)(3,4);  // 调用成员函数指针所指向的函数sum

测试例子

#include "stdfax.h"class Vector
{
public:int sum(int a, int b);int pro(int a, int b);
};// Vector::sum means that "sum belongs to vector"
int Vector::sum(int a, int b)
{return a + b;
}
int Vector::pro(int a, int b)
{return a * b;
}void start_test()
{// member function pointer valiableint (Vector::*pmemfunc_ptr)(int a, int b);pmemfunc_ptr = &Vector::sum;Vector v;int a = (v.*pmemfunc_ptr)(1, 2);cout << "a = " << a << endl;pmemfunc_ptr = &Vector::pro;int d = (v.*pmemfunc_ptr)(3, 4);cout << "d = " << d << endl;
}

C++函数指针与成员函数指针相关推荐

  1. c ++ 函数的esp指针_在C ++中通过指针访问成员函数

    c ++ 函数的esp指针 Create a class along with data member and member functions and then access the member ...

  2. C++成员变量指针和成员函数指针

    深度探索C++对象模型这本书还有提到C++类的成员变量指针和成员函数指针,虽然在实际开发中用的不多,但是还是需要理解下. 一:成员变量指针 1.1 非静态成员指针 类成员变量指针,实际上并不是真正意义 ...

  3. 类的成员函数指针和静态成员函数指针 调用成员函数***

    C++提供static这个关键词对静态成员进行声明,静态成员函数和类的实例化无关,对于同一类来说,静态成员函数是所有类的对象共享的.而普通成员函数需要实例化才能调用,对于每一个实例来说,普通成员函数是 ...

  4. [Reprint]C++普通函数指针与成员函数指针实例解析

    这篇文章主要介绍了C++普通函数指针与成员函数指针,很重要的知识点,需要的朋友可以参考下 C++的函数指针(function pointer)是通过指向函数的指针间接调用函数.相信很多人对指向一般函数 ...

  5. C++57个入门知识点_40 常成员函数(用于定义不可修改类内部成员变量的函数,一般用来修饰Get函数;常成员函数this指针:const T* const;常成员函数内部变量修改方法:强转/关键字)

    前面我们已经学习了C++中重要的知识点,特别是虚函数可能会有些懵逼,但是需要我们在实践中不断的理解和尝试,写代码是进步最快的方式,接下来将会介绍一些简单但很重要的知识点,本篇介绍常成员函数. 总结: ...

  6. c结构体中定义的成员指针赋值与结构体指针作为成员函数参数的使用

    c语言定义结构体可以直接声明结构体变量的,如下 struct Student{char *name; int age; }xiaoming 这样以来,我们就定义了一个结构体类型,同时声明了一个结构体变 ...

  7. 10.2 运算符重载函数作为类成员函数和友元函数

    Complex operator+(Complex &c2) { Complex c; c.real=real+c2.real; c.imag=imag+c2.imag; return c; ...

  8. 【C++】类和对象【中篇】--C++六个默认成员函数以及const成员函数

    文章目录 一.类的6个默认成员函数 二.构造函数 1.概念 2.特性 2.1特征分析--自动生成 2.2.特征分析--选择处理 2.3特征分析--默认构造 3.C++11补丁--缺省值 三.析构函数 ...

  9. 【C/C++学院】(8)全局函数和类成员函数转化/友元/操作符重载

    1.全局函数和类成员函数转化 全局函数和成员函数的相互转化:只需要修改一个指向本类的this指针: #include <iostream> using namespace std;clas ...

  10. C++运算符重载函数作为类成员函数和友元函数

    C++运算符重载函数作为类成员函数 1.1成员函数的重载运算符左侧是一个类对象,而且与运算符函数类型相同. 因为必须通过类的对象去调用该类的成员函数,而且只有运算符重载函数和返回值类型相同,运算结果才 ...

最新文章

  1. Context-Based Access Control (CBAC) 基于上下文的访问控制 理论知识
  2. 使用vagrant基于官方的box制作自己的基础box
  3. Keras【Deep Learning With Python】RNN Classifier 循环神经网络
  4. python-opencv时间计算,视频物体追踪标记
  5. wamp5.5.12安装re dis扩展
  6. python 港股交易数据_GitHub - 116pythonZS/futuquant: 富途量化平台 API
  7. WebMaster如何处理网站内容重复?
  8. 在进行了解JAVA CLASS文件解析时必须要明白的三个概念
  9. 若只有4KB内存可用,该如何打印数组中所有重复的元素
  10. PHP_CodeSniffer HG 服务端部署篇
  11. 堆优化的Dijkstra
  12. Web安全实践(11)用户名枚举
  13. 概率论--Z=X+Y概率密度的推导
  14. 服务器安装虚拟声卡,虚拟声卡安装使用 虚拟声卡注意事项
  15. GSON处理URL转码
  16. 〖强暴贴〗号称全国最大开发者网络的CSDN多次出现低级错误 验证码形同虚设 开发人员竟是MVP
  17. xp系统禁用wmi服务器,windows xp系统启用WMI服务的方法
  18. 在线OJ后端涉及到的知识点
  19. Tackling High Dimensional Nonseparable Optimization Problems By CCPSO
  20. Condition实现线程通信

热门文章

  1. JAVA手机验证码的生成简单实现
  2. (二十)通俗易懂理解——汽车功能安全
  3. 高数 03.02洛必达法则
  4. Linux Socket 两个客户端通信,服务端作为中转
  5. 告别百度网盘,安装自己的专属网盘——Cloudreve,不限制下载速度!
  6. Latex矩阵和表达式组的绘制
  7. Naive Bayes——Naive在哪?
  8. 如何用快启动pe修复win10系统引导?
  9. 软件测试用例设计之Pairwise算法
  10. 考研数学-行列式的几何意义