一般函数指针与成员函数指针

  函数指针,顾名思义,指向函数的指针。

  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();

 

你可能感兴趣的:(一般函数指针与成员函数指针)