作者conan77420 (小馬非馬)
看板C_and_CPP
標題Re: [問題] 多型的需要???
時間Thu Oct 15 18:39:56 2009
※ 引述《sunneo (艾斯寇德)》之銘言:
: ※ 引述《ms6163 ()》之銘言:
: : 最近正在看多型的東西
: : 忽然產生一個問題:
: : 為什麼我們需要多型呢???
: : 沒有多型的話 在實際開發中會遇到什麼樣的困難???
: : (我了解有沒有用virtual的結果有什麼差別,但是在實際的開發中,我們會在什麼樣
: : 的情況下會把derived class轉成based class??)
: 你希望為一個type family的instance作一件重複的,同樣的事情
: 你知道他們有一個最頂層的super type
: 那麼你只需要為這個root作一份subroutine
: 就可以對這些sub type作同樣的呼叫
: example1
: Add Listener for components
: 一個設計的視窗元件,他們都繼承了component,
: 你希望為他們都加上listener
: 這時候polymorphism就很好用了
: 可以搭配陣列、指標、參照,一口氣為需要的subtype作同樣的操作
example2
所有的樂器都繼承了樂器,你希望所有的樂器都demo/play一次
你可以使用`樂器`的play來呼叫所有樂器的play
最近在看多型,經過爬文後自己大概有個結論可是不知道對不對
我想確定的是,多型是為了多個物件重複執行相同動作而誕生的概念
就像例子二,所有樂器都要play所以使用`樂器`的play來呼叫所有樂器的play
所以也就是說,不能選擇只play某部份的樂器,
多型的概念在於,繼承後的物件,都一定要執行此動作囉?
假設,小提琴有繼承〝樂器〞,鼓沒有繼承〝樂器〞,所以要撥放的只有小提琴
相反的如果兩個都有繼承〝樂器〞,當〝樂器〞的play()被執行時,兩個都要撥放囉?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.229.129.213
推 legnaleurc:Inherit to Be Reused, Not to Reuse. 10/15 18:42
→ legnaleurc:個人是覺得你理解的方式有微妙的不同 10/15 18:43
→ james732:我也覺得原PO有一點誤會 10/15 19:44
→ conan77420:因為我觀念還不是很強,可否請強者解說一下是哪裡誤解 10/15 20:21
推 flamerecca:應該是 因為樂器的play很像 總會有一些重複的地方 10/15 23:08
→ flamerecca:那一些地方就可以定義於class 樂器 裡面吧 10/15 23:08