重载运算符 - >访问数据成员

时间:2014-03-25 20:38:56

标签: c++ c++11

我对以下有关重载的示例程序有疑问 - >运算符,在C ++教程中相同:

 5     class myclass
 6     {
 7         public:
 8         int i;
 9
10         myclass *operator->()
11         {return this;}
12     };
13
14     int main()
15     {
16         myclass ob;
17
18         ob->i = 10;
19         cout << ob.i << " " << ob->i << endl;
20
21         return 0;
22     }

$ ./a.out
10 10

我想了解第18行是如何工作的。我理解&#34; ob&#34;不是指针,而是因为&#34;类myclass&#34;已经定义了运营商&#34; - &gt;&#34;,&#34; ob-&gt; i&#34;是有效的(语法上),到目前为止很好。然而,&#34; ob-&gt;&#34;返回一个指针,我不知道如何取消引用它以访问成员&#34; i&#34;并设置它。

我假设上述解释也将解释第19行&#34; ob-&gt; i&#34;打印为int。

谢谢你, 艾哈迈德。

2 个答案:

答案 0 :(得分:7)

operator->在一个链中被调用,直到它不再被调用 - 在你的情况下,它实际上被调用了两次 - 一次,你的对象上的重载操作符,它返回一个指针,以及第二次,内置运算符取消引用该指针并访问该成员。

答案 1 :(得分:6)

如果x->y是类对象并且找到重载成员x.operator->()->y,则

x相当于operator->

我希望它能更清楚。