c++之反引用运算符

       原创文章,转载请注明出处,谢谢!       
       作者:清林,博客名:飞空静渡

 

在C++中,有两个运算符我们很少用到,这两个运算符就是反引用运算符:->*和.*。

 

下面介绍一下这反引用运算符的使用。

 

在C++中,我们定义一个变量的指针可以这样:

int a=5;

int *pA = &a;

 

然后,我们就可以使用pA来获得a的值。

 

而在C++中,我们定义函数指针大概是这样的:

 

void (*pFun)(int);

 

如果是定义一个函数指针类型,就是这样:

 

typedef void (*pFun_t)(int);

 

如果我们有这样一个函数:

void fun(int i)

{

    ......

}

 

那么我们就可以这样

pFun_t pfun = fun;

 

然后就可以使用pfun来代替fun,下面是使用代码:

 

说完C++中的普通变量的指针和函数指针后,我们来看看反引用运算符的用法。

假设我们有一个类:

 

 

那么,我们又怎么定义类A中的这两个成员的指针呢,定义类的成员的指针是这样的:

 

void (A::*pFun)(int) = &A::fun;

int A::*pNum = &A::num;

 

我们看到成员变量指针的定义比普通变量指针和函数指针的定义多了域操作符A::。

 

那么我们定义完这些成员变量的指针后,就应该运用反引用运算符来使用这些成员变量指针了,我们先看这两个反引用运算符的用法:

->* :可以用类对象指针反引用成员指针。

.*    :可以用类对象反引用成员指针。

 

其使用如下:

 

 

我们看到,上面是这样使用的:

(pA->*pFun)(12);

 

那为什么不是这样使用呢?

pA->*pFun(12);

 

这里的原因是函数的调用的优先级要比反引用运算符->*要高,所以如果这样使用就会编译出错,因此我们必须在这里使用括号来改变运算符的优先级。

 

那成员变量可以这样使用:

int a = pA->*pNum;

 

如果我们这样使用会怎么样:

int a = ++pA->*pNum;

 

这里++运算符要比->*运算符优先级高,因此会让pA自加后再调用num成员。

.*反引用运算符的使用和->*的用法一样,只不过是对应于类的对象,而不是类的对象指针。

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值