• <六>指向类成员的指针


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

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

    示例代码1

        class Test2{
    
        public:
           int ma;
           static int mb;
           void f1(){cout<<"Test::void f1()"<static void static_f(){
               cout<<"Test::void static_f()"<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<static void static_f(){
           cout<<"Test::void static_f()"<< mb<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;
    }
    
    
  • 相关阅读:
    多国语言客服系统,打破语言障碍
    写给刚入学大数据专业或迷茫在为几两碎银转行的你
    C#使用 WebView2 替代 Electron/Tauri 之 Web 核心
    vue 完整学习笔记(一)
    【SpringBoot篇】基于SpringBoot进行Web开发
    mp4视频批量截取!!!
    Zookeeper的使用
    BUUCTF Reverse/crackMe
    python程序编写
    chrome F12 network 保留之前请求信息
  • 原文地址:https://www.cnblogs.com/erichome/p/16886445.html