分类:
2010-12-02 15:07:15
一、指向类静态成员的指针 类的静态成员是全局的,定义它们的方法与定义普通指针一样。下面的程序很好地说明了这一点。 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< 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< }
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< 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< } for(int j=0;j<2;j++) { cout<<(b.*array2[j])()< cout<<(q->*array2[j])()< } |