个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈
前面曾写过一篇恼人的函数指针(一),总结了普通函数指针的声明、定义以及调用,还有函数指针数组,函数指针用作返回值等。但是作为C++的研读,我发现我漏掉了一个最重要的内容,就是指向类成员的指针,这里将做相应补充(相关代码测试环境为vs 2010)。
指向类成员的指针总的来讲可以分为两大类四小类(指向数据成员还是成员函数,指向普通成员还是静态成员),下面一一做介绍:
一、指向类的普通成员的指针(非静态)
1、指向类成员函数的指针
简单的讲,指向类成员函数的指针与普通函数指针的区别在于,前者不仅要匹配函数的参数类型和个数以及返回值类型,还要匹配该函数指针所属的类类型。总结一下,比较以下几点:
a)参数类型和个数
b)返回值类型
c)所属的类类型(特别之处)
究其原因,是因为非静态的成员函数必须被绑定到一个类的对象或者指针上,才能得到被调用对象的this指针,然后才能调用指针所指的成员函数(我们知道,所有类的对象都有自己数据成员的拷贝,但是成员函数都是共用的,为了区分是谁调用了成员函数,就必须有this指针,this指针是隐式的添加到函数参数列表里去的)。
明白了这点,接下来就简单了。
声明:与普通函数作为区分,指向类的成员函数的指针只需要在指针前加上类类型即可,格式为:
typedef 返回值 (类名::*指针类型名)(参数列表);