指向类成员(成员变量和成员方法)的指针

1:定义一个指针指向类的普通成员变量

示例代码1

点击查看代码
class Test2{public:   int ma;   static int mb;   void f1(){cout<<"Test::void f1()"<<endl;}   static void static_f(){       cout<<"Test::void static_f()"<<endl;   }};int Test2::mb=0;int main(){    int *p = &Test2::ma;    return 1;}

上面 int *p = &Test2::ma; 可以这样吗?不可以, 编译报错 不可以将 int Test2::* 转为 int *

点击查看代码
    需要这样定义     int  Test2::*p = &Test2::ma;    *p=30;//这样操作没有意义,因为ma是需要基于对象的,所以需要这样     Test2  t;    int  Test2::*p = &Test2::ma;    t.*p=30;    或者    Test2 *pt=new Test2();    int  Test2::*pp = &Test2::ma;    pt->*pp=40;    或者    int *p3=&Test2::mb;    *p3=50;

2:定义一个函数指针指向类的成员函数

void (*pf)() = &Test2::f1(); 编译报错

要明确的指出pf是指向Test2类中函数的函数指针,如下

void(Test2::*pf)()=&Test2::f1();

如果通过函数指针调用函数?需要依赖对象,如下
Test2 t3;
Test2 p4=new Test2();
t3.
pf(); //*解引用

(p4->*pf)();// *解引用

3:定义函数指针指向类的静态成员方法

void (pf2)() = &Test2::static_f;
(
pf2)();

完整示例代码如下

点击查看代码
class Test2{public:   int ma;   static int mb;   void f1(){cout<<"Test::void f1()"<ma<<endl;}   static void static_f(){       cout<<"Test::void static_f()"<< mb<*p=2000;    //定义指针指向 类的 静态成员变量    int *pStatic = &Test2::mb;    *pStatic=9999;    //定义函数指针 指向 类的普通成员方法    void (Test2::*pf)()=&Test2::f1;    (obj1.*pf)();    (pObj2->*pf)();    //定义函数指针 指向 类的静态方法     void (*pf2)() = &Test2::static_f;     (*pf2)();    return 1;}