[英]overloading operator -> to access data member
我有一個關於以下關於重載的示例程序的問題 - >運算符,在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行是如何工作的。 我理解“ob”不是一個指針,但由於“class myclass”定義了運算符“ - >”,“ob-> i”是有效的(語法),到目前為止還不錯。 但是,“ob->”返回一個指針,我看不到如何取消引用它來訪問成員“i”並進行設置。
我假設上面的解釋也將解釋第19行“ob-> i”是如何打印為int的。
艾哈邁德,謝謝你。
operator->
在一個鏈中被調用,直到它不再被調用 - 在你的情況下,它實際上被調用了兩次 - 一次,你的對象上的重載操作符,它返回一個指針,第二次,內置的操作符,取消引用指針並訪問該成員。
x->y
等效於x.operator->()->y
如果x
是一個類對象並且找到了重載的成員operator->
。
我希望它能從中得到更清楚。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.