作者EricTCartman (阿ㄆㄧㄚˇ)
看板Soft_Job
标题Re: [请益] 多型用在哪
时间Fri Mar 5 00:20:10 2021
※ 引述《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://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1614874812.A.171.html
1F:推 joe7226107: 推,重点是介面和行为 03/05 00:45
2F:推 cuteSquirrel: 前面好可爱 03/05 00:50
3F:→ jej: 写中文好吗 我不想看到平假名 03/05 01:14
4F:→ mmonkeyboyy: 会用介面的人通常都是同时用很多语言才有语感 03/05 02:53
5F:嘘 final01: 明明就是使用的时机不同,什麽教没有多型。。。。 03/05 08:25
6F:推 aidansky0989: 介面是行为的抽象,多型只是调用不同物件的行为 03/05 09:25
7F:嘘 accessdenied: 注音文劣退 03/05 13:41
8F:推 samioplg: 这开头我以为我在枫之谷 03/05 15:11
9F:推 a731977: 推 写多了也有这种感觉 03/05 17:18
10F:→ InvincibleK: 注音教学:ㄉ一ㄠˇㄅㄠˋㄌㄜ˙ㄅㄢˇㄓㄨˇㄌㄞˊㄎ 03/06 20:29
11F:→ InvincibleK: ㄢˋ一ㄡˇㄇㄟˊ一ㄡˇ一ㄠˋㄕㄨㄟˇㄊㄨㄥˇㄊㄚ 03/06 20:31
12F:推 wesley234: 打车跟打炮都是打,都是打,但细节的动作不同。OO屎一 03/09 16:24
13F:→ wesley234: 堆 03/09 16:24