zoukankan      html  css  js  c++  java
  • 一般函数指针与成员函数指针

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

      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();
  • 相关阅读:
    Js事件触发列表与解说(转)
    HTTP 头部解释,HTTP 头部详细分析,最全HTTP头部信息
    【转】php 数组 编码转换
    Cookie 的规范介绍
    PHP底层的运行机制与原理
    PHP为什么会被认为是草根语言?
    asp.net中读取带有加号(+)的Cookie,会自动把加号替换为空格
    git克隆某个分支到本地指定的目录中
    yq(json,yaml)格式转换工具安装和使用
    k8s中configmap的作用及使用方式
  • 原文地址:https://www.cnblogs.com/kobe-echo/p/4292878.html
Copyright © 2011-2022 走看看