类中成员函数的函数指针定义以及使用
在algorithm算法中经常会碰到传递函数指针的情况,在这里面他们把这种类型叫做谓词,当然lambda表达式就是
谓词的一种。这次内容要说的当类的成员函数做为谓词时,是什么样子的,如何使用呢?
类中一共会有三种函数:
1.非静态非虚函数
非静态非虚函数的函数指针,因为成员函数里面会传递this指针,所以就算是函数指针,也必须有对象来调用他们。
非静态非虚函数的函数指针格式:
返回类型(类名::*指针名)(参数)=类名::&函数名; //至于最后的函数名前需不需要加&,我认为都可以的。当然,加上更加规范。
使用时:
对于指向类成员函数的函数指针,调用时必须传入一个类对象的this指针,所以必须有类实体调用
格式:
(pa->*指针名)(参数); pa是指向对象的指针 //同样,指针名前*是不是必要的,去尝试。
(a.*指针名)(参数); a是一个对象 //同上
2.类中静态成员函数
静态成员函数并不需要this指针,那么它和非静态非虚函数会是相同的调用方式吗?
定义方式:
返回值(*p)(参数)=&类名::函数名; //和全局函数定义方式一样,赋值方式和非静态非虚函数相同
使用:由于不需要传递this指针,所以使用和全局函数相同
指针名(参数);
3.虚函数
虚函数呢,它为了运行时多态,所以我们在编译期间根本无法知道调用哪一个函数,更不用说取得地址了。
如果取了虚函数的地址,据说会取到索引值。当然,有兴趣的可以尝试哈。
所以呢,取虚函数的地址是没有意义的。
类中成员函数的函数指针定义以及使用相关推荐
- 类中成员函数声明后面的const的含义
这个const一般是对类中成员函数属性的声明,但这个声明怪怪的,只能放在函数声明的尾部,大概是因为其它地方都已经被占用了.这个声明表示这个函数不会修改类中的任何数据成员.如果在编写const成员函数时 ...
- java面试题2 牛客:定义类中成员变量时不可能用到的修饰是
懵逼树上懵逼果,懵逼树下你和我 第二题 定义类中成员变量时不可能用到的修饰是() A final B void C protected D static 一看到这道题,有点慌了,直接选c,很显然,我又 ...
- C++类中成员变量的初始化有两种方式
C++类中成员变量的初始化有两种方式: 构造函数初始化列表和构造函数体内赋值.下面看看两种方式有何不同. 成员变量初始化的顺序是按照在那种定义的顺序. 1.内部数据类型(char,int--指针等) ...
- python类中成员的的调用
python类中成员的调用 python类中的方法到底到底是方法还是函数取绝于调用者, 当类名调用这个方法时他是一个函数 class Foo(object):def f1(self):print(&q ...
- C++类中成员变量的初始化总结
C++类中成员变量的初始化总结 1. 普通的变量: 一般不考虑啥效率的情况下 可以在构造函数中进行赋值.考虑一下效率的可以再构造函数的初始化列表中进行. 1 class CA 2 { 3 p ...
- java 类中有几种访问权限_类中成员的访问权限_Java语言程
类中成员的访问权限_Java语言程 4.7.2 类中成员的访问权限 Java将类中成员(成员变量和成员方法)的访问权限(可见性)划分为4种情况,按照访问权限的范围大小从小到大列出如下. ·私有(pri ...
- Java笔记-通过放射获取类中成员名及调用get方法及map构造JSON数据
目录 通过反射获取类中成员名 通过反射调用get方法 map生成JSON数据 通过反射获取类中成员名 /*** 获取类中的所有成员名* @param currentClass* @return* @t ...
- C++57个入门知识点_40 常成员函数(用于定义不可修改类内部成员变量的函数,一般用来修饰Get函数;常成员函数this指针:const T* const;常成员函数内部变量修改方法:强转/关键字)
前面我们已经学习了C++中重要的知识点,特别是虚函数可能会有些懵逼,但是需要我们在实践中不断的理解和尝试,写代码是进步最快的方式,接下来将会介绍一些简单但很重要的知识点,本篇介绍常成员函数. 总结: ...
- 在python中定义类时、运算符重载_自定义 Python 类中的运算符和函数重载(上)...
如果你对 Python 中的str对象使用过 + 或 * 运算符,你一定注意到了它的操作与 int 或 float 类型的区别: 你可能想知道同一内置运算符或函数如何对不同类对象进行不同操作的.这分别 ...
最新文章
- 摹客iDoc Sketch插件全新改版!
- Java 9:对可选的增强
- 单片机ADC采样算法----限幅滤波法
- 1684. 统计一致字符串的数目
- iOS UITextField限制输入字数
- 合并多行查询数据到一行:使用自连接、FOR XML PATH('')、STUFF或REPLACE函数
- nmake comment
- 简述软件工程、软件开发方法、软件开发工具相关概念及之间的关系
- Mac上的python的数据分析与挖掘学习之路(一)
- 好听的敕勒川天苍苍野茫茫风吹草低见牛羊
- 2.3Linux中的日志管理
- 2009年中国各省人均GDP排名(鄂尔多斯人均GDP将很有可能超过两万美元,全国第一)...
- Java微信SDK方式进行网页授权
- 如何将深度学习与你正在做的事情相结合?
- ChatGPT进阶——如何辅助设计E-R图、流程图和时序图等
- 华清远见-重庆中心-JavaScript知识点梳理
- CenterPoint 学习笔记
- 仿宋GB213字体加粗后笔画发虚
- 3.3 初学者不能回避——《逆袭大学》连载
- 计算机属于电器还是学习用品,未来的学习用品作文
热门文章
- H5原生调用摄像头getUserMedia的使用与注意事项
- 【数字图像处理matlab】(边界跟踪-光栅扫描法)
- 让数据分析效率再提升50%,帆软FineBI V6.0版本最新剧透
- 解码方法(一条包含字母 A-Z 的消息通过以下方式进行了编码)
- subList 截取数组 前10个
- UncategorizedMongoDbException: Exception authenticating MongoCredential解决办法
- 那段故事,慢慢道来(4)
- 使用YOLOv5实现实时目标检测结果保存
- Go 带缓冲的Reader读文件、一次性读取文件
- TLS/SSL协议 RC4算法安全漏洞CVE-2013-2566