Re: [請益] 多型用在哪

看板Soft_Job (軟體人)作者 (阿ㄆㄧㄚˇ)時間5年前 (2021/03/05 00:20), 編輯推噓3(524)
留言11則, 10人參與, 5年前最新討論串5/5 (看更多)
※ 引述《empireisme (empireisme)》之銘言: : 請問多型的用途是? ㄛ現在ㄉ想法4 沒有多型 只有介面 多型的用例之一 for(auto p_actor : actors) p_actor->act() 對ㄛ來縮 p_actor實際上到底是什麼 並不重要 我只要知道他是actor會act就好 他有可能是warrior也可能是wizard, but i don't care 那麼寫久了 你就會看到一些反模式 if(auto p_wizard = dynamic_cast<Wizard>(p_actor)) p_wizard->cast_spell() 或者是 virtual void act() override {assert(false); /*not support*/} 前者的問題在於 就算有一種方法能讓dynamic_cast的效能神快 這個代碼卻涉及了對Wizard的知識 代表在統一處理actor的片段中多了一個特例 後者的問題在於 所有actor都應該要能act 為什麼你不支援 有可能是一個程式設計師只想要base class的特定功能 又懶得自己開一個新的 然後class越來越肥 可能大家都看過惹 這就是為什麼java標榜他只能單一繼承 然後又特例獨行搞了個implement interface 其實就是變向要你做到粒度 不然你會越寫越屎 所以縮 如果你只是要介面 為什麼不用template template對許多不熟悉c++的工程師來說陌生 而且ide支援度不高 所以說c++ 20的concept真是好用 結合繼承的優點 又兼容了介面ㄉ彈性 那就是policy 就算不用policy 也可以用component的pattern 再不然 你也可以用pure abstract class來引入interface的風格 最後 現在go跟rust的interface跟trait 其實講的就是這件事 因為比起繼承還是多型啥的玩意兒 其實大家最關注的還是介面跟行為 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.231.126.131 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1614874812.A.171.html

03/05 00:45, 5年前 , 1F
推,重點是介面和行為
03/05 00:45, 1F

03/05 00:50, 5年前 , 2F
前面好可愛
03/05 00:50, 2F

03/05 01:14, 5年前 , 3F
寫中文好嗎 我不想看到平假名
03/05 01:14, 3F

03/05 02:53, 5年前 , 4F
會用介面的人通常都是同時用很多語言才有語感
03/05 02:53, 4F

03/05 08:25, 5年前 , 5F
明明就是使用的時機不同,什麼教沒有多型。。。。
03/05 08:25, 5F

03/05 09:25, 5年前 , 6F
介面是行為的抽象,多型只是調用不同物件的行為
03/05 09:25, 6F

03/05 13:41, 5年前 , 7F
注音文劣退
03/05 13:41, 7F

03/05 15:11, 5年前 , 8F
這開頭我以為我在楓之谷
03/05 15:11, 8F

03/05 17:18, 5年前 , 9F
推 寫多了也有這種感覺
03/05 17:18, 9F

03/06 20:29, 5年前 , 10F
注音教學:ㄉ一ㄠˇㄅㄠˋㄌㄜ˙ㄅㄢˇㄓㄨˇㄌㄞˊㄎ
03/06 20:29, 10F

03/06 20:31, 5年前 , 11F
ㄢˋ一ㄡˇㄇㄟˊ一ㄡˇ一ㄠˋㄕㄨㄟˇㄊㄨㄥˇㄊㄚ
03/06 20:31, 11F
文章代碼(AID): #1WGGYy5n (Soft_Job)
討論串 (同標題文章)
文章代碼(AID): #1WGGYy5n (Soft_Job)