C++从入门到放弃之:成员指针

成员指针

成员指针的好处就是可以修改成员指针的指向,不论是成员变量指针还是成员函数指针,只要指针指向的成员或者函数的类型(参数表)一致,就可以改变其指向

成员变量指针

成员变量指针并不是真正意义上的指针,而是假指针,保存的是指针指向的对象的相对偏移地址

  • 成员变量指针的定义和初始化
    类型 类名::*指针变量名 = &类名::成员变量;
  • 成员变量指针的使用
    对象.*成员指针变量名;
    注:.*直接成员指针解引用操作符
    对象指针->*成员变量;
    注:->*间接成员指针操作符
#include <iostream>
using namespace std;
class A{
public:
    int m_i,m_j;
    A(void):m_i(100),m_j(200){

    }
};
int main() {
    std::cout << "Hello, World!" << std::endl;
    //pm为成员对象指针
    int A::*pm = &A::m_i;
    pm = &A::m_j;//修改pm成员指针,下面代码就会改变访问的对象
    A a1;
    A* a2 = new A;
    cout<<a1.*pm<<endl;
    cout<<a2->*pm<<endl;

    return 0;
}

/home/panda/WorkSpace/memptr/cmake-build-debug/memptr
Hello, World!
100
100

进程已结束,退出代码 0
/home/panda/WorkSpace/memptr/cmake-build-debug/memptr
Hello, World!
100
100

进程已结束,退出代码 0

成员函数指针

成员函数指针获取函数在代码段的绝对地址
成员函数的调用总是伴随着传递this*指针作为实参,传递对象的地址,没有对象就没有this指针实参

  • 成员函数指针的定义和初始化
    返回类型(类名::*成员函数指针) (参数表) = &类名::成员函数名;
  • 成员函数指针的使用
    (对象.*成员函数指针)(实参);
    (对象指针->*成员函数指针)(实参表);
#include <iostream>

using namespace std;

class A {
public:
    int func1(void) {
        return 0;
    }

    int func2(void) {
        return 0;
    }
};

    int main() {
        int A::*pfmem() = &A::func1;
        //pfmem = &A::func2;
        A a1;
        A *a2 = new A;
        (a1.*pfmem)();
        (a2->*pfmem)();
        return 0;
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值