C++指向成员函数的指针
C++指向函数的指针定义方式为:
返回类型 (*指针名)(函数参数列表),例如 void (*p)(int)是指向一个返回值为void 参数为int类型的函数。
而若想定义一个指向类成员函数的函数指针该怎么定义呢?对成员函数指针的使用。
(1)非静态成员函数
定义方式:返回类型 (类名::*指针名)(函数参数列表)例如void (A::*p)(int)是一个指向A类中成员函数的函数指针。
赋值方式:p=&A::函数名,而一般的函数指针的赋值是p=函数名即可,注意区别。(成员函数必须是public类型的)
调用方式:成员函数指针的调用必须通过类对象进行调用,a.*p(int)即可调用成员函数(该成员函数是public类型的)
(2)静态成员函数
对于静态成员函数的定义和使用方法都与普通函数指针的相同,只是在赋值的时候和非静态成员们函数指针的赋值方法相同。
因为静态成员函数的指针类型是与普通函数指针类型相同的。
----------------------------------------------------------------------------------------------------------------------
对于单类型的成员函数指针的使用就是上述的内容,但是对于C++来说,继承是其三大特性之一,那么对于继承类来说,成员函数指针怎么实现动态呢?
(1)赋值问题
与正常的派生类指针或引用可以赋于基类指针或引用不同,基类成员函数可以赋于派生类成员函数指针(任何情况下都不会出错),反之派生类成员函数在未覆盖基类函数名的情况下也能赋于基类成员函数指针。如下例:
class A class B class C:public A,B
{ { {
public: public: public:
void printA(int) virtual void printB(int) void printB(int)
{ { {
} } }
}; }; };
void (A::*Pa)(int);void (B::*Pb)(int);void (C::*Pc)(int)
pa=&C::printA;(正确)相当于将C中A类对象的函数传给指针。
pb=&C::printB;(错误)因为printB已经在C类中修改,两者的类型不同
pc=&A::printA;(正确)
pc=&B::printB;(正确)
总结:只要不被派生类覆盖的函数均可以赋给基类成员函数指针。
(2)多态调用
接上例:
pb=&B::printB;
(b.*pb)(i);(调用b类中的printB)
(c.*pb)(i);(调用c类中的printB)
但是对于pc指针只能由c类对象调用,不能由基类调用。
根据对象实例的类型去判断应该调用的函数。
C++指向成员函数的指针相关推荐
- C++中,如何定义和使用指向成员函数的指针
/** * 定义指向成员函数的指针变量的形式 : 成员函数返回类型 (类名∷*指针变量名)(参数列表) * 成员函数指针变量值的形式 : &类名∷成员函数名; * 成员函数指针变量使用形式 : ...
- C++教程:指向成员函数的指针
转载自:https://kelvinh.github.io/blog/2014/03/27/cpp-tutorial-pointer-to-member-function/ Kelvin的胡言乱语 = ...
- 指向成员函数的指针有什么用_指针函数,函数指针,有点懵圈了?你能分清楚吗...
指针函数和函数指针到底怎么区分? 1.前言 数组.指针,这两个词结合的顺序不同,其意义也不同. 同样的,函数.指针这两个词结合的顺序不同其意义也不同,即指针函数与函数指针的意义不同. 2.指针函数 指 ...
- c语言中target,C 11:使用std :: function :: target()指向成员函数的指针
我知道这已经是一个长期讨论的话题,但我还没有找到满足我的答案. 简而言之:即使使用C 11的function :: target()功能,是不是可以将成员函数指针传递给c风格的方法? 以下代码不起作用 ...
- 指向类成员/函数的指针
C++扩展了指针在类中的使用,使其可以指向类成员,这种行为是类层面的,而不是对象层面的. 指向类成员/函数的指针的本质并不是取地址.而是利用了对象地址的偏移量 我们创建了一个类,假设我们要使用指针指向 ...
- C++之指向对象成员函数的指针
定义指向对象成员函数的指针变量的方法和定义指向普通函数指针变量方法有所不同: 1.普通指针函数变量的定义方法:数据类型名(*指针变量名)(参数列表): 例:void (*p)(void); p = ...
- 如何使用指向类的成员函数的指针(详解!)
原文:如何使用指向类的成员函数的指针(详解!) 另外一篇英文参考:Member Function Pointers and the Fastest Possible C++ Delegates 我们首 ...
- C++57个入门知识点_40 常成员函数(用于定义不可修改类内部成员变量的函数,一般用来修饰Get函数;常成员函数this指针:const T* const;常成员函数内部变量修改方法:强转/关键字)
前面我们已经学习了C++中重要的知识点,特别是虚函数可能会有些懵逼,但是需要我们在实践中不断的理解和尝试,写代码是进步最快的方式,接下来将会介绍一些简单但很重要的知识点,本篇介绍常成员函数. 总结: ...
- 《C++ Primer 第五版》(第6.3~6.7节)——返回指向数组/函数的指针,函数重载,默认形参、inline函数和constexpr函数
1.返回指向数组/函数的指针 顾名思义,就是函数返回值为指向数组/函数的指针. 数组的性质:不能被拷贝,函数也不能返回数组.但可以返回数组指针/引用,声明一个返回数组指针的函数,有四种方式,一种是直接 ...
最新文章
- oracle创建DBA角色命令,oracle常用DBA命令
- html -%3e 转义,特殊字符html,css转义大全
- 办公室影响同事关系的九种行为
- 操作系统 第二章【进程管理】【MOOC答案】
- java如何创建一个两个数的队列_java线程池 如何构建一个线程立即到拉到MAX数量跑业务,线程到MAX了,额外的队列可以存储任务的线程池...
- A. Slackline Adventure(思维 + 莫比乌斯)(2018-2019 ACM-ICPC Brazil Subregional Programming Contest)
- PMP考试技巧(必备)
- OleDbDataAdapter 插入记录
- 秒懂文件路径 ‘/‘ , ‘./‘ , ‘../‘ 的区别
- Python Json读写(json模块)(转载)
- 另存为fdf或xps加载项_2007 Microsoft Office加载项:Microsoft另存为PDF或XPS
- layui 汉字乱码_layui table中文乱码
- 绵阳南山中学计算机老师邱浩,还原“博士论文走红”的中科院博士:学成还乡衣着朴素...
- 富勒x100滚轮无法调节音量怎么办?
- Naxx Central District 1 Ice dragon saffron
- 苹果手机测试网络速度的软件,App Store 上的“网速测试大师-测网速首选”
- yolov3 官网文档 设计到编译,训练,map等参数测试,windows和linux均有说明
- 【tiny4412】按键控制led灯亮灭
- c语言零序电压的计算算法,零序电流计算方法解析.pdf
- 宁波市第32届中小学生程序设计竞赛(初中组) 公鸡打鸣