指向类成员函数指针

来源:互联网 发布:php 错误日志配置 编辑:程序博客网 时间:2024/06/06 15:15

1、指向非静态成员的指针

其实指向非静态的类成员的指针很容易,它们与普通指针唯一的区别是,他们受类的限制。如下:

class A
{
       int _val;
       int val();
};

int (A::*p_val) = &A::_val;
int ( A::*p_func )() = &A::val;

看到了吗,是的,和普通的指针的区别是,指向类成员的指针必须把类也一并带上,上面的例子中就是要把A::这个限定符一起带上,然后?用法和普通指针一样的就是了。

2、指向静态成员的指针

指向静态成员的指针,声明的方式和普通指针完全一样,只是赋值的时候,还得加上类的限定符。为什么这样?我想可以这样来理解,对于非静态成员,其存在取决于类,类消亡的时候,非静态成员随之消亡,所以,其声明必须与类的限定符绑在一起,而静态成员对于类而言并无依附关系,所以,不需要类的限定符。如下:

class A
{
       static int _val;
       static int val();
};

int *p_val = &A::_val;
int (*p_func) = &A::val;

3、好处

一个好处是,通过指向成员的函数指针,可以很轻松的调用各个成员函数了,另一个好处是,对于静态成员函数,可以成为C里的回调函数啦。


下面是一个例子,加深一下理解:

#include <iostream>

#include <string>

using namespace std;

typedef void (*funchandler)();

void register_func(funchandler f)

{

    cout << "register_func" << endl;

    (*f)();

}

class A

{

public:

    A() : _val( 0 ) { cout << "create A..." << endl; }

    void test() { cout << "test..." << endl; }

    void test1() { cout << "test1..." << endl; }

    void test2() { cout << "test2..." << endl; }

    int val() { return _val; }

    static void test3() { cout << "test3..." << endl; }

    int _val;

private:

};

int main()

{

    A a;

    int ( A::*p_val ) = 0;

    p_val = &A::_val;

    cout << "a.*p_val: " << a.*p_val << endl;

    

    void (A::*p_func)();

    p_func = &A::test;

    

    a.test();

    (a.*p_func)();

    

    p_func = &A::test1;

    ( a.*p_func )();

    p_func = &A::test2;

    ( a.*p_func )();

    

    void (* pp_func)();

    pp_func = &A::test3;

    (*pp_func)();

    

    register_func( pp_func );

    return 0;

    

}

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 魅蓝e2信号差怎么办 魅蓝e2gps信号弱怎么办 魅族网络信号差怎么办 魅族手机gps信号弱怎么办 魅族手机突然没有信号怎么办 魅族手机流量信号不好怎么办 魅族手机wifi信号差怎么办 魅族5s信号不好怎么办 魅族mx5的双击不亮屏怎么办 魅族mx5返回键失灵怎么办 电信苹果3g网速慢怎么办 魅蓝6开不了机怎么办 手机应用被锁了怎么办 魅族电池不耐用怎么办 魅族mx6现在很卡怎么办 魅族e2手机屏幕背景黑色怎么办 魅族x6手机锁了怎么办 360n5返回键失灵怎么办 360n5返回键不好用怎么办 魅族手机锁屏怎么办 魅族手机锁住了怎么办 手机己锁定怎么办魅族 魅蓝u10触屏没反应怎么办 魅蓝e2手机锁定怎么办 苹果手机声音键坏了怎么办 一加6的屏幕问题怎么办 魅蓝note6卡顿怎么办 苹果4s内屏坏了怎么办 魅族mx6一直重启怎么办 魅族充电慢了怎么办啊 笔记本玩游戏掉帧怎么办 psv玩游戏掉帧怎么办 ipad玩游戏掉帧怎么办 手机玩游戏严重掉帧怎么办 苹果7p掉电快怎么办 努比亚z11手机总是开关机怎么办 努比亚手机不能保存图片怎么办 小米8拍照和努比亚怎么办 oppor7手机开不了机怎么办 vivox5m手机开不开机怎么办 步步高x7图案解锁忘记怎么办