函数指针,顾名思义,指向函数的指针。
C++中函数指针的声明形式为: void (*pfn)()
C++中函数指针的赋值:pfn=funName 或 &funName
C++中函数指针的使用:pfn() 或(*fun)()
看到了上面的赋值跟使用的时候,我们不禁会产生疑问,为什么指针的赋值可以用函数名?又可以用取地址的形式赋值呢?为什么可以通过指针可以直接调用函数呢?指针不是需要解引用才能访问指向的内容吗?这个我表示也暂时不理解编译器编译的时候的具体赋值细节。不过这里我们可以先把函数名,当作数组名理解,希望有理解的人可以解释出来。
上面我们看到的是一般的函数指针,但是因为C++支持面向对象
,所以就多出来一个指向具体类的成员函数指针,简称为成员函数指针,下面我也从定义与赋值,再到使用来讲解。 成员函数指针
声明: void (ClassName::*pfn)()
赋值: pfn=&ClassName::fun;
使用:(对象指针->*pfn)();
赋值的时候需要强调只能通过这一种方式赋值, 即&(类名::函数名),注意,这里不能用this->fun 来赋值,因为c++编译器对this->fun 实际上是在函数参数中加入了this指针,指向该对象 fun(ClassName *this)。使用的时候需要注意的是,对成员函数的调用通过对象来完成,同样,对成员函数的指针的调用同样需要借助对象.(对象指针->*pfn)();这样就完成的对成员函数的调用。那么想想如果是静态的成员函数指针怎么调用呢?
class X { public: static void display(); bool getValue(); }; typedef void (*pf)(); pf p=X::display; (*p)(); //或p();