C++中的成员指针(pointer-to-member)

今天在看《STL源码剖析》的函数适配器那一章节的时候,看到出现这种语法(p->*f)(),以前从来没注意到->*的用法,于是查了一些资料。


C++中->*运算符主要是结合成员指针(pointer-to-member)进行使用,所谓的成员指针是指向类成员变量或者成员函数的指针。注意这里说类,并没有说对象。这是是因为实际上它仅仅是一个偏移量,并与任何对象都没有关系。

指向成员指针的例子如下:

      #include <iostream> 

  1.  
  2.  
  3. using namespace std; 
  4.  
  5. class Data { 
  6. public
  7.     int a,b,c; 
  8.     void printf() { 
  9.         cout << a << " " << b << endl; 
  10.     } 
  11. }; 
  12.  
  13. int main() { 
  14.     Data d; 
  15.     Data * pd = &d; 
  16.     // 声明一个指向Data类中a成员的一个指向成员变量的指针 
  17.     int Data::*mem = &Data::a; 
  18.     // 有两种取得指针指向内容的方法,这是第一种:通过对象的指针访问 
  19.     pd->*mem = 4; 
  20.     mem = &Data::b; 
  21.     // 第二种访问方式 
  22.     d.*mem = 10; 
  23.  
  24.     // 以我们熟悉的方式调用函数 
  25.     pd->printf(); 
  26.  
  27.     // 声明一个指向Data::print()的一个成员函数指针 
  28.     void (Data::*ptr)(); 
  29.     ptr = &Data::printf; 
  30.  
  31.     // 同样有两种调用方式 
  32.     (pd->*ptr)(); 
  33.     (d.*ptr)(); 
  34.  
  35.     return 0; 

注意成员指针是受限制的,他们紧紧能被指定给在类中的确定的位置。例如我们不能像使用普通指针那样增加或者比较成员指针。

 

转载网址:http://blog.csdn.net/dongtianzhe/article/details/4103978

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值