文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>c++中指向类成员的指针

c++中指向类成员的指针

时间:2010-12-06  来源:xylxz

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

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

class A

{

public :

static void f()

{

       cout<<m_data+1<<endl;

}

static int m_data;

};

int A::m_data=10;

void main()

{

       int * ip=&A::m_data;

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

       cout<<*ip<<endl;

       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<<a.*ip<<endl;

       cout<<p->*ip<<endl;

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

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

       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<<b.*array1[i]<<endl;

              cout<<q->*array1[i]<<endl;

       }

      

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

       {

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

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

       }

}

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<<a.*ip<<endl;//通过对象访问指向类数据成员的指针

cout<<p->*ip<<endl;//通过对象指针访问指向类数据成员的指针

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

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

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<<b.*array1[i]<<endl;

       cout<<q->*array1[i]<<endl;

   }

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

   {

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

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

   }


排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载