超载' - >'成员访问运营商

时间:2017-02-12 02:57:28

标签: c++ operator-overloading

在重载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

我哪里错了?

1 个答案:

答案 0 :(得分:0)

C ++在文本编辑器中不像搜索/替换那样工作。 &#34;&obj1- GT;&#34;不是由ptr逐字替换,就好像这是文本文件中的一行文本。

使用:

Obj->myfun();

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

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

这并不代表原始陈述不知何故变为

ptrmyfun();

好像&#34; Obj-&gt;&#34;被#34; ptr&#34;取代。 C ++根本不能以这种方式工作,比如在文本编辑器中搜索/替换。

->运算符导致调用自定义operator->()。那部分,你如何理解运算符重载的工作原理是正确的。

但是,简单地说,operator->()的返回值成为实际指针取消引用所应用的实际指针值。

所以这基本上变成了:

ptr->myfun();

这就是全部。