看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: Win10, Linux, ...) Win7 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) C++ 問題(Question): 想請問大大們 繼承與聚合的建構方式 Class:樂器 聚合 Class:樂器規格(InstrumentSpec) ------------------------------ <------ ------------------------------- 成員:序號(string) 型號(string) 價格(double) 材質(string) 樂器規格(InstrumentSpec) ^ ^ | | | 繼承 | 繼承 | | Class:吉他 聚合 Class:吉他規格(GuitarSpec) ------------------------------ <------ ------------------------------- 吉他規格(GuitarSpec) 弦數(int) 樂器的constructor: 樂器(string 序號, double 價格, InstrumentSpec 樂器規格); 樂器規格的constructor: 樂器規格(string 型號, string 材質) 吉他規格的constructor: 吉他規格(string 型號, string 材質, int 弦數) 這時候我就有點困惑有關於吉他的contructor的撰寫方式 這是我目前想到可行的建構子 吉他的contructor: 吉他(string 序號, doble 價格, GuitarSpec 吉他規格) :樂器(序號, 價格, 吉他規格),吉他規格(吉他規格) 這樣建構是正確的嗎? 感覺樂器initializer的規格那部分可以移掉, 畢竟後面吉他規格已經有初始化到了.... 還是有正確的建構方式呢? 先謝謝您們的回答了!!!! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.163.159.95 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1508429660.A.8B0.html ※ 編輯: dwight90488 (1.163.159.95), 10/20/2017 00:15:08
PkmX: 你這樣guitar裡面會有兩個獨立的*Spec成員 10/20 00:21
z1976: 因為樂器規格是動態型別,所以建議用指標 10/20 02:33
z1976: 用智慧型指標不用管理delete 10/20 02:33
legendmtg: 為什麼你的GuitarSpec要繼承InstrumentSpec? 10/20 12:07
dwight90488: 因為很多樂器規格是共有的 所以GuitarSpec我也繼承了 10/20 12:08
legendmtg: 不是有共同的屬性就要繼承啊 是取決於你要怎麼操作 10/20 13:58
legendmtg: 兩個改法 1. GuitarSpec不要繼承InstrumentSpec 10/20 14:01
legendmtg: 2. 吉他不要有GuitarSpec 直接用樂器的InstrumentSpec 10/20 14:02
legendmtg: 指標指向GuitarSpec物件 10/20 14:03
dwight90488: 謝謝以上各位的回答 Legendmtg大大說的沒錯 10/20 20:05
dwight90488: 我仔細想了之後 好像不是必要繼承的 我可以把 10/20 20:06
dwight90488: guitarSpec當成是 吉他規格是跟樂器相比多出來的屬性 10/20 20:07
y3k: 借文問一下 這樣的Case在CPP用template寫有跟Java、C#一樣便 10/21 16:58
y3k: 利嗎@@ 最近剛開始從那兩個進到這裡來... 10/21 16:58
uranusjr: 就這個 case 來講用 template 就和 generics 差不多 10/21 18:25