#include <iostream>
using namespace std;
class myclass
{
public:
void fun()
{
cout<<"Having some fun"<<endl;
}
};
class spointer
{
myclass * mptr;
public:
spointer(myclass * m)
{
mptr=m;
}
myclass * operator->()
{
return mptr;
}
};
int main() {
// your code goes here
spointer s(new myclass);
s->fun();
return 0;
}
在s->fun()
中调用main
时,s->
会返回指向myclass
的指针,但会在fun()
对象上调用myclass
指针指向?
编辑:由于spointer::operator->
会返回指向myclass
的指针,为什么可以说s->fun()
,而不必说s->->fun()
或其他什么
答案 0 :(得分:6)
C ++ 11标准说明了重载的->
运算符(13.5.6“重载/重载运算符/类成员访问”):
如果
(x.operator->())->m
存在,并且如果通过重载解析机制选择运算符作为最佳匹配函数,则表达式x-&gt; m被解释为类型为T的类对象x的T::operator->()
< / p>
因此,成员访问运算符(->
)将应用于重载实现的结果(导致类似于s->->fun()
注释的内容)。这允许重载在实现智能指针或指针代理时“自然地”操作。