知识补充(一)成员指针

在非类型模板参数一文中,我们了解到类成员指针可以用作非类型参数使用,这一节我们一起简单了解以下成员指针。

1、成员变量指针

定义成员变量指针的语法如下:

类名::*指针名

举一个简单的例子,有类A,内部有一个int成员x:

class A {
public:
    int x;
};

我们可以定义一个成员变量指针:

int A::*ptr = &A::x;

成员对象指针使用示例如下:

int main() {
    int A::*ptr = &A::x;
    A a;
    a.*ptr = 10;
    std::cout << a.x << std::endl;
}

如何理解上述例子呢?

表达式&A::x是获取类A的成员变量x的地址,A::x表示A的成员x,&表示取地址。

在以往的学习中,我们通常用类名::成员名来获取类的静态成员或者是静态方法,但是在这里作用域解析符后的成员可以是非静态的,这个用法是有条件的,必须加上&

获取了成员变量的地址,就需要有一个变量来接收这个地址,这个变量的类型是什么呢?

int A::*ptr可以分成三部分来理解:

  • int:成员变量是int类型;
  • A:::A类型中的成员;
  • *ptr:这是一个指针;

连起来理解:ptr是一个指向类A的int型成员变量的指针。

之后我们再要用到A类中的x成员,就可以用成员指针代替,使用方法是将成员对象解引用。

与普通指针不同的是,成员指针不能直接解引用,必须通过对象或者对象的引用/指针来解引用。例如,如果我们有一个A类型的对象a,可以用a.*p(pa->*p)来访问或修改成员变量x的值。

2、成员函数指针

成员函数指针和成员变量指针类似,这里举一个简单的例子:

class A {
public:
    void func(int x) { std::cout << "x = " << x << std::endl; }
};

int main() {
    void (A::*pf)(int) = &A::func;
    A a;
    (a.*pf)(10);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青山渺渺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值