Chinaunix首页 | 论坛 | 博客
  • 博客访问: 339152
  • 博文数量: 88
  • 博客积分: 1695
  • 博客等级: 上尉
  • 技术积分: 1380
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-06 15:48
个人简介

喜欢美食, 旅行..

文章分类

全部博文(88)

文章存档

2014年(2)

2013年(12)

2012年(14)

2010年(8)

2009年(52)

我的朋友

分类: C/C++

2010-10-11 01:58:25

成员指针不是真正的指针。传统意义上的指针是一个整数,保存指向某个变量或函数的地址。成员指针则是一个复合数据结构,包含有若干个数据成员。成员指针的这个复杂性使得入门比较困难。然而,一旦掌握了它的语法,就能感到它是在事件驱动和多线程应用中调用回叫函数必不可少的工具。

说太多没用,注意调用方式,案例如下:


  1. #include <iostream>
  2. using namespace std;

  3. struct Data
  4. {
  5.     size_t print(char * str)
  6.     {
  7.         cout << str << endl;
  8.         return strlen(str);
  9.     }
  10.     size_t (Data::*pnormalPrint)(char * str); // 定义指向成员函数的指针成员
  11. };

  12. int main()
  13. {
  14.     Data data;

  15.     typedef size_t (Data::*Point)(char * str); // 定义指向成员函数的指针类型
  16.     Point func = &Data::print; // 定义指向成员函数的指针实体,并赋值
  17.     (data.*func)("typedef size_t (Data::*Point)(char * str);");

  18.     size_t (Data::* pPrint)(char * str) = &Data::print; // 定义指向成员函数的指针实体,并赋值
  19.     (data.*pPrint)("size_t (Data::*pPrint)(char * str)");
  20.     
  21.     data.pnormalPrint = &Data::print; // 指向成员函数的指针成员的赋值
  22.     (data.*(data.pnormalPrint))("size_t (Data::*pnormalPrint)(char * str);");

  23.     return 0;
  24. }


阅读(594) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~