[問題] 多形繼承問題
1.
先來個範例code
http://codepad.org/jG9RbZrp
宣告一個父類別A裡包含virtual fun
再宣告兩個子類別B,C 各自也包含此 fun
我不懂的是,用A物件去接B , C
和 A的指標接,為何答案不一樣
我一直以為"A class有+virtual 執行fun就會去看物件的本質[也就是B C]"
2.第二個問題
範例,這我自己打的
main
http://codepad.org/hz4VEAGx
class
http://codepad.org/9Av7FLdG
http://codepad.org/GKNWHfBX
http://codepad.org/F746IDlf
這裡也是我confuse的地方
2.1 父class的fun沒有+virtual的情況
B,C new出來的物件 用B,C去接 為什麼不會被複寫到阿[我知道有virtual的話一定會,可是沒+的話B,C宣告同一個fun時應該要複寫調阿]
2.2 有+
全跑出父class的結果,我猜跟1.的原因依樣
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
問題(Question):
餵入的資料(Input):
預期的正確結果(Expected Output):
錯誤結果(Wrong Output):
程式碼(Code):(請善用置底文網頁, 記得排版)
補充說明(Supplement):
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.248.65.90
※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1396756774.A.E68.html
※ 編輯: fakewen (111.248.65.90), 04/06/2014 12:01:13
推
04/06 12:22, , 1F
04/06 12:22, 1F
可以請你說清楚一點嗎,小弟還是不大了解
推
04/06 12:24, , 2F
04/06 12:24, 2F
→
04/06 12:26, , 3F
04/06 12:26, 3F
→
04/06 12:27, , 4F
04/06 12:27, 4F
→
04/06 12:28, , 5F
04/06 12:28, 5F
感謝,不過為何
1. 用pointer或reference接才會dynamic? 有原因嗎?
2. 我用
3. 若我不用virtual十,ABC都有同一個fun,"為何不會複寫阿?"
4. 我把我PO的第一個範例裡的B C裡的virtual去掉,答案還是依樣啊?
※ 編輯: fakewen (111.248.65.90), 04/06/2014 17:53:34
→
04/06 18:06, , 6F
04/06 18:06, 6F
→
04/06 18:06, , 7F
04/06 18:06, 7F
痾這句是呼應個問題啊?
→
04/06 18:09, , 8F
04/06 18:09, 8F
→
04/06 18:12, , 9F
04/06 18:12, 9F
我懂了,有+virtual時
call by value的話,Aobject只是複製Bo,Co的值,但fun還是A的
call by ptr/ref[請問在多型繼承裡這兩個有差嗎?],是指向B C,就會啟動dynamic binding,執行BC的結果
推
04/06 18:29, , 10F
04/06 18:29, 10F
→
04/06 18:30, , 11F
04/06 18:30, 11F
※ 編輯: fakewen (111.248.65.90), 04/06/2014 18:32:03
→
04/06 18:31, , 12F
04/06 18:31, 12F
新問題!!
http://codepad.org/xQGkcyn2
請問compiler幫加virtual的規範是什麼
上例改成只有B有virtual
照你剛解釋的C:public B
所以應該輸出 A B B阿?
→
04/06 18:33, , 13F
04/06 18:33, 13F
→
04/06 18:34, , 14F
04/06 18:34, 14F
※ 編輯: fakewen (111.248.65.90), 04/06/2014 18:49:12
→
04/06 18:35, , 15F
04/06 18:35, 15F
→
04/06 18:36, , 16F
04/06 18:36, 16F
→
04/06 18:37, , 17F
04/06 18:37, 17F
已解答推文問題1.
→
04/06 18:42, , 18F
04/06 18:42, 18F
→
04/06 18:53, , 19F
04/06 18:53, 19F
→
04/06 18:54, , 20F
04/06 18:54, 20F
→
04/06 18:56, , 21F
04/06 18:56, 21F
→
04/06 18:57, , 22F
04/06 18:57, 22F
※ 編輯: fakewen (111.248.65.90), 04/06/2014 18:59:52
※ 編輯: fakewen (111.248.65.90), 04/06/2014 20:34:26
※ 編輯: fakewen (111.248.65.90), 04/06/2014 20:45:02
推
04/06 22:18, , 23F
04/06 22:18, 23F
→
04/06 22:18, , 24F
04/06 22:18, 24F
→
04/06 22:19, , 25F
04/06 22:19, 25F
→
04/06 22:23, , 26F
04/06 22:23, 26F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章
-4
5