当前位置:网站首页 > 技术博客 > 正文

c++ 成员函数指针



指向类成员函数的指针与普通函数指针的区别在于,前者需要匹配函数的参数类型和个数以及返回值类型,还要匹配该函数指针所属的类类型。

这是因为非静态的成员函数必须被绑定到一个类的对象或者指针上,才能得到被调用对象的this指针,然后才能调用指针所指的成员函数(所有类的对象都有自己数据成员的拷贝,但是成员函数都是共用的,为了区分是谁调用了成员函数,就必须有this指针,this指针是隐式的添加到函数参数列表里去的)。

所以,对于类成员函数的指针使用包含以下几个步骤:

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

 

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

 

注意:这里的这个&符号是比较重要的:不加&,编译器会认为是在这里调用成员函数,所以需要给出参数列表,否则会报错;加了&,才认为是要获取函数指针。这是C++专门做了区别对待。

调用: 针对调用的对象是对象还是指针,分别用.*和->*进行调用,格式为:

 

注意:这里的前面一对括号是很重要的,因为()的优先级高于成员操作符指针的优先级。

直接来看一个示例吧:

 

类的静态成员函数和普通函数的函数指针的区别在于,他们是不依赖于具体对象的,所有实例化的对象都共享同一个静态成员,所以静态成员也没有this指针的概念。

所以,指向类的静态成员的指针就是普通的指针。

 

总结以上两种情况的区别:

  • 如果是类的静态成员函数,那么使用函数指针和普通函数指针没区别,使用方法一样
  • 如果是类的非静态成员函数,那么使用函数指针需要加一个类限制一下。

使用函数指针,很多情况下是用在函数的参数中,在一些复杂的计算,如果需要重复调用,并且每次调用的函数不一样,那么这时候使用函数指针就很方便了,可以减少代码量。

参考资料:
https://blog.csdn.net/houzijushi/article/details/
https://www.cnblogs.com/lvchaoshun/p/7806248.html
https://www.cnblogs.com/AnnieKim/archive/2011/12/04/2275589.html

  • 上一篇: geo redis
  • 下一篇: socks5代理搭建教程
  • 版权声明


    相关文章:

  • geo redis2025-04-10 21:30:01
  • css3的高级选择器有哪些2025-04-10 21:30:01
  • matlab函数介绍2025-04-10 21:30:01
  • java匿名内部类格式2025-04-10 21:30:01
  • 计算机专业学生职业生涯规划2025-04-10 21:30:01
  • socks5代理搭建教程2025-04-10 21:30:01
  • relu激活函数可以解决梯度爆炸吗2025-04-10 21:30:01
  • 数据库测试工具有哪些2025-04-10 21:30:01
  • syswow32文件夹在哪2025-04-10 21:30:01
  • 半导体封装工艺2025-04-10 21:30:01