首页后端开发其他后端知识六指向类成员的指针

六指向类成员的指针

时间2023-04-04 14:00:01发布访客分类其他后端知识浏览477
导读:指向类成员(成员变量和成员方法 的指针 1:定义一个指针指向类的普通成员变量 示例代码1 点击查看代码 class Test2{ public: int ma; static int mb; void f1( {cou...

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

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()"this->
    maendl;
}

   static void static_f(){
    
       cout"Test::void static_f()" mbendl;

   }

   Test2(int _ma):ma(_ma){
}

}
    ;
    

int Test2::mb=0;



int main(){
    

    Test2    obj1(100);
    
    Test2   *pObj2=new Test2(20);
    

    //定义指针指向 类的普通成员变量
    int Test2::*p = &
    Test2::ma;
    
    obj1.*p=1000;
    
    pObj2->
    *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;

}
    

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: 六指向类成员的指针
本文地址: https://pptw.com/jishu/1073.html
五关于类的各类成员 go语言关闭垃圾回收 golang gc回收

游客 回复需填写必要信息