#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;
}
Run Code Online (Sandbox Code Playgroud)
当s->fun()调用时main,s->会返回指针myclass,但是如何在指针指向的对象fun()上调用myclass?
编辑:因为spointer::operator->返回指针myclass,为什么可以说s->fun(),而不是说s->->fun()或什么
C++ 11标准说明了重载->运算符(13.5.6"重载/重载运算符/类成员访问"):
表达式x-> m被解释为
(x.operator->())->m类型为T的类对象x(如果T::operator->()存在)以及是否通过重载解析机制将运算符选为最佳匹配函数
因此,成员访问operator(->)应用于重载实现的结果(导致某些内容与您的s->->fun()注释相似).这允许过载在实现智能指针或指针代理时"自然地"操作.
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |