推 snowlike:這和 int *ptr; int *a=# ptr=*a; 不是相同嗎 05/19 21:31
→ snowlike: int a=num; 應該要&a; 不好意思我跳著看 05/19 21:35
※ 編輯: conan77420 來自: 115.43.50.25 (05/19 21:36)
→ conan77420:不好意思我手誤打錯XD 05/19 21:36
→ loveme00835:陣列 a 裡每一個元素跟 ptr 的型態都是 Animal*, 所以 05/19 21:43
→ loveme00835:在 assign 的時候很直覺的寫法應該是不加任何*或& 05/19 21:44
→ loveme00835:這時候用 Animal* a[ 6 ]; 會比較好解讀型態, 你可能 05/19 21:48
→ loveme00835:把 a 跟 ptr 想成同型態了 05/19 21:49
→ loveme00835:我好像回錯 Q 口 Q, 以上請當我沒推 05/19 21:55
→ loveme00835:你可以把ptr 指向不同物件, 像是 ptr = &Bird; 多型是 05/19 21:56
→ loveme00835:在執行時期確定物件的類別, 而你第一次寫的版本強制的 05/19 21:58
→ loveme00835:把 父類別物件 = 子類別物件, 子類別所包含的資訊全都 05/19 21:59
→ loveme00835:消失了, 然後 ptr = &a[randomunmber]; ptr 指到的實 05/19 22:00
→ loveme00835:際還是Animal 物件, 所以並沒有任何多型的行為 05/19 22:00
對對,我就是想問這個
可是我是把子類別的物件塞到父類別的物件中
而不是父類別的放入子類別的
為什麼會消失呀
※ 編輯: conan77420 來自: 115.43.50.25 (05/19 22:09)
→ loveme00835:想像子類別除了繼承父類別的成員, 還可以額外擴充新的 05/19 22:12
→ loveme00835:成員, 所以子類別物件包的東西可能比父類別物件來得多 05/19 22:13
→ loveme00835:當你這樣assign的時候, 一個父類別物件是裝不了那麼多 05/19 22:14
→ loveme00835:成員的, 所以關於子類別的資訊(或成員)就會遺失掉 05/19 22:15
→ loveme00835:相反的 : 子類別物件 = 父類別物件, 也不合法, 因為一 05/19 22:16
→ loveme00835:個父類別物件「不是」一個子類別物件 05/19 22:18
推 snowlike:取決於ptr指向型態是父還是子類而已,子類裝父類多型仍可 05/19 22:19
→ snowlike:不過要額外定義對子類對父類別的assign行為就是了 05/19 22:20
→ loveme00835:子類 = 父類, 行為還是子類的行為, 允許這樣的行為可 05/19 22:27
→ loveme00835:能要對子類的成員負一些管理的責任 05/19 22:28
→ conan77420:原來這樣不合法,謝謝回答 05/19 22:35