Re: [問題] 重載-> ?

看板C_and_CPP (C/C++)作者 (灰塵)時間16年前 (2010/06/16 22:56), 編輯推噓4(406)
留言10則, 7人參與, 最新討論串2/2 (看更多)
objX -> _____ ; 這樣的statement會被編譯器視為(當然前提是objX是有重載->運算子的物件) objX . operator->() -> _____ ; 在這邊請把"operator->"當成純粹的函數名稱,也就是你重載運算子時所用的函數。 推文中tinlans所說的連鎖就是這個意思。

06/14 15:36,
operator->裡面除了return,不能做其他事?
06/14 15:36
可以啊。operator overloading什麼事情都可以做XD


06/14 16:53,
(*a)->bbb(); 這行如果把*號拿掉,結果就不是自己要的
06/14 16:53
以下我把->運算子還原成(*).的形式,重載的->運算子用operator->()代替。 其實是這樣的: (*a)->bbb() ===> (*a) . operator->() -> bbb() => (*((*a).b)).bbb() 是用無參數的建構子生成的。 印出13 a->bbb() ===> (*a).bbb() 是有參數為1個int的建構子生成的。 印出11 所以兩者的結果不一樣。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.64.251

06/16 23:06, , 1F
\灰塵耶/
06/16 23:06, 1F

06/16 23:14, , 2F
這個討論串收錄於 z-3-12-3-4
06/16 23:14, 2F

06/16 23:15, , 3F
我只是把教授的說法搬來用而已XD
06/16 23:15, 3F

06/16 23:35, , 4F
不要說是小黃教的,這樣我會慚愧 QAQ
06/16 23:35, 4F
就是他教的。

06/17 00:10, , 5F
好久沒看到小黃鳥窩頭
06/17 00:10, 5F

06/17 00:43, , 6F
我要說這小黃有教XD
06/17 00:43, 6F

06/17 00:58, , 7F
一、(*a)->bbb(); 二、(*a).operator->()->bbb();
06/17 00:58, 7F

06/17 00:58, , 8F
三、a->operator->()->bbb(); 請問一如何轉成二的?
06/17 00:58, 8F
Expression會先運算 *a 的部份。 在此a是指標,所以這個運算式會得出它所指向的物件...就先叫那個物件為obj_a好了 於是原式(*a)->bbb()會變成obj_a->obb(),此時obj_a為aaa型別的物件。 接下來因為aaa這個type有重載->運算子, 所以接著會把obj_a->obb()變成obj_a.operator->()->bbb()。 obj_a只是在此講解用的,文章裡是用(*a)來表示 而且(*a)->bbb()真的可以寫成(*a).operator->()->bbb(),編譯會過 =========

06/17 01:04, , 9F
推....:)
06/17 01:04, 9F

06/17 23:53, , 10F
小黃對不起都沒好好認真上課orz
06/17 23:53, 10F
※ 編輯: dustlike 來自: 140.113.64.251 (06/19 02:13)
文章代碼(AID): #1C6EOQ4m (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
4
17
完整討論串 (本文為第 2 之 2 篇):
4
10
4
17
文章代碼(AID): #1C6EOQ4m (C_and_CPP)