Re: [問題] 重載-> ?
objX -> _____ ;
這樣的statement會被編譯器視為(當然前提是objX是有重載->運算子的物件)
objX . operator->() -> _____ ;
在這邊請把"operator->"當成純粹的函數名稱,也就是你重載運算子時所用的函數。
推文中tinlans所說的連鎖就是這個意思。
推
06/14 15:36,
06/14 15:36
可以啊。operator overloading什麼事情都可以做XD
推
06/14 16:51,
06/14 16:51
→
06/14 16:53,
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
06/16 23:14, 2F
→
06/16 23:15, , 3F
06/16 23:15, 3F
→
06/16 23:35, , 4F
06/16 23:35, 4F
就是他教的。
→
06/17 00:10, , 5F
06/17 00:10, 5F
→
06/17 00:43, , 6F
06/17 00:43, 6F
推
06/17 00:58, , 7F
06/17 00:58, 7F
→
06/17 00:58, , 8F
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
06/17 23:53, 10F
※ 編輯: dustlike 來自: 140.113.64.251 (06/19 02:13)
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章