我对以下有关重载的示例程序有疑问 - >运算符,在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。
谢谢你, 艾哈迈德。
答案 0 :(得分:7)
operator->
在一个链中被调用,直到它不再被调用 - 在你的情况下,它实际上被调用了两次 - 一次,你的对象上的重载操作符,它返回一个指针,以及第二次,内置运算符取消引用该指针并访问该成员。
答案 1 :(得分:6)
x->y
是类对象并且找到重载成员x.operator->()->y
,则 x
相当于operator->
。
我希望它能更清楚。