→ james732:我建議你跑跑看、觀察結果,對照書本,再上來說說想法 XD 11/04 00:15
→ StephenNash:有跑過了,我觀念不夠好 @@ 我怕我理解錯誤 11/04 00:15
→ StephenNash:他是屬於C這個類別的物件嘛? 11/04 00:19
推 loveflames:記得dtor要宣告virtual 11/04 00:19
→ loveflames:是指標而不是物件吧 11/04 00:20
→ StephenNash:那麼寫V *v_ptr = new C; 和C *v_ptr = new C; 11/04 00:23
→ StephenNash:有什麼不同嘛? 11/04 00:23
推 loveflames:沒宣告virtual的function就有差了 11/04 00:29
→ StephenNash:嗯,我好像知道有加virtual會連結到晚期的,也就是自 11/04 00:34
→ StephenNash:記得負函式,我的疑惑在於為什麼可以拿V 宣告的指標 11/04 00:35
→ StephenNash:去指向c 11/04 00:35
推 LPH66:單純只是因為 C "is a" V 而已 (這就是繼承的"is a"關係) 11/04 00:35
推 loveme00835:簡單記住一個原則: 父類別如果沒有任何virtual函式, 11/04 00:35
→ loveme00835:表示他不想被人家繼承, 繼承表示「子類別物件也算一種 11/04 00:36
→ loveme00835:父類別物件」所以用指標去指當然合法, 這是語意層面的 11/04 00:37
→ loveme00835:問題 11/04 00:37
→ StephenNash:那麼如果C有一些V沒有的東西,那麼也可以指向囉? 11/04 00:40
→ james732:其實指標寫 A *a; B *b = (B*)a; 不管A B是什麼都會過關 11/04 00:41
→ james732:只是會發生啥事沒人知道而已...XD 11/04 00:41
→ james732:只要有寫(B*)這樣的強制轉型,怎麼轉都可以,只是不安全 11/04 00:43
→ loveme00835:看你使用什麼型別的指標去操作, 用型別 V 的指標去指, 11/04 00:43
→ loveme00835:最多只能用到類別 V 所定義的東西 11/04 00:43
推 loveflames:喜歡的話拿int的指標去指也可以 11/04 00:44
→ StephenNash:…所以這是未定義事件嘛? 謝謝大家的回覆@@ 好感動 11/04 00:45
→ StephenNash:哦 所以只能指共通擁有的東西就是了@@ 11/04 00:46
→ james732:正確來說,你只能使用共通擁有的東西,才能保證不會錯誤 11/04 00:46
→ StephenNash:那如果加virtual的話,就會指向C ,不加的話編譯器便會 11/04 00:49
→ StephenNash:錯誤指向V,大概是這樣囉 11/04 00:49
→ loveme00835:樓上是什麼結論阿= =" 11/04 00:52
→ james732:virtual應該是說會動態的選擇正確的函式 11/04 00:52
→ StephenNash:我不太懂,只是跑出來好像是這樣…對不起喔 11/04 00:52