推 CoNsTaR: 寫在 constructor 裡面? 01/18 19:22
→ icetofux: 如果指的是子類別的constructor那可能不行,因為沒有強 01/18 19:29
→ icetofux: 制力, 對方在繼承的時候可以不去做它. 如果寫在父類別 01/18 19:30
→ icetofux: 的constructor裡則會像我註解掉的那行一樣, 發生錯誤. 01/18 19:31
推 LPH66: 轉個彎, 把需要的設定資料往上丟給 constructor 如何? 01/18 20:02
→ LPH66: (我是指 parent class 的 ctor) 01/18 20:02
→ LPH66: 以此例來說, 反正 gender 在 Parent 就有了 01/18 20:03
→ LPH66: 那就把 "male" 或 "female" 往上丟給 Parent 讓他做事 01/18 20:04
→ LPH66: (也就是 SetGender 別 virtual 也別給 Child override 了 01/18 20:04
→ LPH66: 把所有東西丟上來給 Parent 解決) 01/18 20:05
推 LPH66: 另外關於你所提的 Error, Effective C++ 有一個項目告誡道 01/18 20:07
→ LPH66: 「永遠不要在建構或解構途中呼叫 virtual 函數」 01/18 20:07
→ LPH66: 簡單原因是建構/解構時 virtual 並不 virtual 01/18 20:08
→ LPH66: 更多請參照 www.artima.com/cppsource/nevercall.html 01/18 20:09
→ icetofux: To LPH66: 謝謝你給的建議, 這個例子是簡化過的, 事實 01/18 20:13
→ icetofux: 上string中的文字可能有非常多種, 我一時想不出更好的 01/18 20:14
→ icetofux: 舉例方式才簡化成這樣的. 01/18 20:14
推 LPH66: 換個方式想, 如果該函式重要到每個繼承者都要設定 01/18 20:16
→ icetofux: 另外也很感謝你針對 virtual 函數給的提示, 我從未注意 01/18 20:16
→ icetofux: 過這問題. 01/18 20:16
→ LPH66: 那那些「重要的部份」正是可以抽出來寫在 parent 的 01/18 20:17
→ LPH66: 這樣一來 Parent 只需要接收部份子 class 不同的資訊 01/18 20:17
→ LPH66: 即可執行這些重要部份,那就自然變成子 class 透過 parent 01/18 20:18
→ LPH66: 的 ctor call 把不同的資訊往上傳讓 Parent 做事 01/18 20:18
※ 編輯: icetofux (220.132.98.137), 01/18/2016 21:02:02
→ LPH66: 一樣的道理啊, 跟資料是二選一還是 N 選一無關 01/18 21:17
→ LPH66: 重點是把設定程序抽出來寫在 Parent,關鍵資訊再由子 class 01/18 21:18
→ LPH66: 藉 ctor 往上傳上去使用 01/18 21:18
→ icetofux: 謝謝你的範例, 這應該是我要的效果沒錯, 剛剛查了一下 01/19 00:15
→ icetofux: 這種建構後面加冒號的寫法, 感覺好實用, 又多上了一課. 01/19 00:17
推 LPH66: 呃, 這個是建構子初始化成員/父類別的標準寫法啊... 01/19 02:08