看板 C_and_CPP 關於我們 聯絡資訊
[問題1] 想請問有一個class A 宣告出一個物件a 用下列兩種方式的差別是什模呢 A *a = new A(); 和 A a; 第二種的話 destructor 是不是就派不上用場了? 我觀念不太清楚 根各位請教一下 謝謝 [問題2] 如果B繼承A 書上總是舉這個例子 A *a = new A(); A *b = new B(); 用於解釋memeber function 會如何被呼叫 以及virtual的相關問題 但我不理解的是為什麼不宣告成 B *b = new B(); 宣告成A *b = new B(); 相較起來會有什麼用途嗎 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 69.142.115.249
dendrobium:[Q1] 物件存放的位置不同 11/10 12:49
dendrobium:[Q1] 都會call "destructor" 11/10 12:50
※ 編輯: Dreamer77 來自: 69.142.115.249 (11/10 12:52)
dendrobium:[Q2] 萬一有 class C :public A , A* a就可以通吃 11/10 12:53
Dreamer77:[Q1] 第二種call destructor是在離開function的時候對吧 11/10 12:54
dendrobium:應該說是離開該scope的時候, 不一定要是function 11/10 12:55
Dreamer77:[Q2] 但也可以宣告C* c呀 不懂A* a 通吃的好處是什麼耶? 11/10 12:56
dendrobium:為了多型 11/10 12:58
Dreamer77:但是不是也可以用template做到一樣的事情 11/10 13:37
LPH66:我只要為了A寫就可以通吃ABC 11/10 13:39
LPH66:template 不一定能保證你對某人寫用在其他人身上會不會出事 11/10 13:40
Dreamer77:但如果BC有不相同的member多型和template一樣都出事吧!? 11/10 13:51
holymars:template只能作到靜態多型,也就是compile time你就要知 11/10 17:52
holymars:道型別,而不能在run time根據型別才來決定行為 11/10 17:53