繁体   English   中英

重载“->”成员访问运算符

[英]Overloading '->' member access operator

在重载operator*我们执行以下操作:

T & operator * () {  return *ptr; }

这意味着如果我有:

SmartPtr<int> obj(new int());
*Obj = 20;
Cout << *obj;

然后,将*obj部分替换为*ptr ,使其与以下各项一样好:

*Ptr=20
cout<<*ptr

现在,在重载operator->同时,我们执行以下操作:

T * operator -> () { return ptr; }

可以通过以下方式访问:

Obj->myfun();

我在这里不了解的是在评估obj->之后将其替换为ptr因此它应如下所示:

ptrmyfun(); // and this is syntax error

我要去哪里错了?

C ++不能像在文本编辑器中搜索/替换一样工作。 “ obj1->”不会被逐字记录所代替,就像这是文本文件中的一行文本一样。

附:

Obj->myfun();

->运算符调用返回ptr的自定义运算符的事实:

T * operator -> () { return ptr; }

这并不意味着原始的声明会以某种方式变为

ptrmyfun();

好像“ Obj->”被“ ptr”代替。 C ++根本无法以这种方式工作,就像在文本编辑器中进行搜索/替换一样。

->运算符导致调用自定义operator->() 您了解操作员重载工作原理的那一部分是正确的。

但是发生的是,简单地,来自operator-> ()的返回值变成了实际指针取消引用所应用于的实际指针值。

因此,这基本上变成了:

ptr->myfun();

就这样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM