簡體   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