Chinaunix首页 | 论坛 | 博客
  • 博客访问: 240325
  • 博文数量: 38
  • 博客积分: 710
  • 博客等级: 上士
  • 技术积分: 315
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-06 10:52
文章分类

全部博文(38)

文章存档

2016年(1)

2015年(10)

2014年(1)

2013年(7)

2011年(9)

2010年(10)

我的朋友

分类: C/C++

2010-12-06 20:54:29

一、指向类静态成员的指针

类的静态成员是全局的,定义它们的方法与定义普通指针一样。下面的程序很好地说明了这一点。

class A

{

public :

static void f()

{

       cout<

}

static int m_data;

};

int A::m_data=10;

void main()

{

       int * ip=&A::m_data;

       void (*fp)()=&A::f;

       cout<<*ip<

       fp();

}

二、指向类非静态成员的指针

先给出一个类定义

class A

{

public:

       int i,j;

       A(int i,int j):i(i),j(j)

       {

       }

       int func1()

       {

              return i++;

       }

       int func2()

       {

              return j++;

       }

};

void main()

{

       int A::* ip;

       ip=&A::i;

       int (A::*fp)();

       fp=&A::func1;

       A a(1,2);

       A * p=new A(3,4);

       cout<

       cout<*ip<

       cout<<(a.*fp)()<

       cout<<(p->*fp)()<

       A b(5,6);

       A * q=new A(7,8);

       int A::* array1[2]={&A::i,&A::j};

       int (A::*array2[2])()={&A::func1,&A::func2};

       A b(5,6);

       A * q=new A(7,8);

       for(int i=0;i<2;i++)

       {

              cout<

              cout<*array1[i]<

       }

      

       for(int j=0;j<2;j++)

       {

              cout<<(b.*array2[j])()<

              cout<<(q->*array2[j])()<

       }

}

1、 定义

a)         指向非静态数据成员的指针

定义指向数据成员的指针时,要在*前加上类名和作用域操作符

例如:int A::* ip;//定义

       ip=&A::i;//赋值

b)        指向非静态函数成员的指针

定义指向函数成员的指针时,要在*前加上类名和作用域操作符

例如:int (A::*fp)();//定义

       fp=&A::func1;//赋值

2、 使用

类成员的指针必须通过特定的对象或指向类对象的指针来访问,通过使用两个指向成员操作符的指针(针对类对象和引用的.* ,以及针对指向类对象的指针的->*)

例如: A a(1,2);//类对象

A * p=new A(3,4);//类指针

cout<通过对象访问指向类数据成员的指针

cout<*ip<通过对象指针访问指向类数据成员的指针

cout<<(a.*fp)()<通过对象调用指向类函数成员的指针

cout<<(p->*fp)()<通过对象指针调用指向类函数成员的指针

3、 应用

定义指向类数据成员的指针数组

int A::* array1[2]={&A::i,&A::j};

定义指向类函数成员的指针数组

int (A::*array2[2])()={&A::func1,&A::func2};

访问:

A b(5,6);

   A * q=new A(7,8);

   for(int i=0;i<2;i++)

   {

       cout<

       cout<*array1[i]<

   }

   for(int j=0;j<2;j++)

   {

       cout<<(b.*array2[j])()<

       cout<<(q->*array2[j])()<

   }


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

chinaunix网友2010-12-07 15:46:04

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com