免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1095 | 回复: 0
打印 上一主题 下一主题

三转 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-04 08:39 |只看该作者 |倒序浏览

C++中的成员指针简介

1、指向非静态成员的指针
其实指向非静态的类成员的指针很容易,它们与普通指针唯一的区别是,他们受类的限制。如下:
class A
{
    int _val;
    int val();
};
int (A::*p_val) = &A::_val;
int ( A::*p_func )() = &A::val;
和普通的指针的区别是,指向类成员的指针必须把类也一并带上,用法和普通指针一样。
2、指向静态成员的指针
指向静态成员的指针,声明的方式和普通指针完全一样,只是赋值的时候,还得加上类的限定符。如下:
class A
{
    static int _val;
    static int val();
};
int *p_val = &A::_val;
int (*p_func) = &A::val;
3、好处:
一个好处是,通过指向成员的函数指针,可以很轻松的调用各个成员函数了,另一个好处是,对于静态成员函数,可以成为C里的回调函数。
下面是一个例子,加深一下理解:
#include  
#include  
using namespace std;
typedef void (*funchandler)();
void register_func(funchandler f)
{
    cout
    (*f)();
}
class A
{
public:
    A() : _val( 0 ) { cout
    void test() { cout
    void test1() { cout
    void test2() { cout
    int val() { return _val; }
    static void test3() { cout
    int _val;
private:
};
int main()
{
    A a;
    int ( A::*p_val ) = 0;
    p_val = &A::_val;
    cout
   
    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;
}



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/14140/showart_179778.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP