→ xam: 等你真的試過再來問... 03/17 14:15
推 bluesoul: 第二種用法意義不大 03/17 14:16
→ james732: void foo(Amimal *a) { a->hello(); } 03/17 14:32
→ james732: 這種情況foo不必知道是什麼動物,只要知道它會說hello 03/17 14:32
→ james732: 可以用"它能做什麼"取代"它是什麼" 03/17 14:33
→ james732: 不同類型但行為相同的程式碼就可以重覆使用 03/17 14:33
→ loveflames: 你這個根本不是多型,沒宣告virtual 03/17 15:21
推 dzwei: 第1.如同樓上說的,沒有虛擬化函數,不算多型 03/17 15:29
→ dzwei: 第二,要多型的話,建立物件的方式要採用Pointer 03/17 15:30
→ dzwei: e.g. Dog* a = new Dog 03/17 15:31
→ loveflames: reference也可以,但沒有指標通用 03/17 16:31
→ loveflames: 另外,雖然virtual方法是一般意義下的多型,但C++可以 03/17 16:33
→ loveflames: 用CRTP來搞靜態多型,這時就可以是non-virtual 03/17 16:33
→ dzwei: 我記得CRTP就一定要用指標而不能Ref了。 03/17 17:03
→ dzwei: 這邊建議一種CRTP的寫法 : 先做一個pure vurtal func在 03/17 17:04
→ dzwei: animal的Class內。然後再做一個animal_CRTP,這個Class 03/17 17:05
→ dzwei: 負責實作靜態轉型為Derived。最後Cat、Dog只要繼承 03/17 17:05
→ dzwei: animal_CRTP<Cat>和animal_CRTP<Dog>即可 03/17 17:06
推 hadoop: 前提是你的compiler能過嗎? 03/19 13:26
→ phishingphi: 額為甚麼一個對virtual函式都不熟的問題會出現CRTP.. 03/20 01:15
推 dzwei: 目前在win10上 03/20 21:11
→ dzwei: 用gcc7 clang6 clang6-cl 03/20 21:11
→ dzwei: 都可以通過編譯且執行結果正確 03/20 21:11
→ dzwei: 目前有問題的是重載operator 03/20 21:11
推 s4300026: animal的func寫成=0這樣想就比較清楚了 03/21 12:23