operator->()重载简介
示例代码
我们先来看下面的示例代码
#include <cstdio>
class A{
int val;
public:
A(int vval): val(vval){}
void print() const {
printf("%d\n", val);
}
void set_val(int vval){
val = vval;
}
};
class PA{ // pointer of A
A* pa;
public:
PA(A* a){
pa = a;
}
A* operator->(){
return pa;
}
};
int main(){
A a(12);
a.print();
a.set_val(18);
a.print();
PA pa(&a);
pa->set_val(24);
a.print();
pa->print();
return 0;
}
执行结果如下
12
18
24
24
语法介绍
operator->()
的执行步骤可以看做是以下步骤
在调用pa->print();
时,pa->print()
中的pa->
会被替换为(【operator->()】的返回值)->
。所以这里相当于被替换为(【operator->()】的返回值)print()
,在这里是(&a)->print()
。