[問題] 繼承與聚合

看板C_and_CPP (C/C++)作者 (陳佳佳)時間8年前 (2017/10/20 00:14), 8年前編輯推噓4(4011)
留言15則, 6人參與, 8年前最新討論串1/2 (看更多)
開發平台(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

10/20 00:21, 8年前 , 1F
你這樣guitar裡面會有兩個獨立的*Spec成員
10/20 00:21, 1F

10/20 02:33, 8年前 , 2F
因為樂器規格是動態型別,所以建議用指標
10/20 02:33, 2F

10/20 02:33, 8年前 , 3F
用智慧型指標不用管理delete
10/20 02:33, 3F

10/20 12:07, 8年前 , 4F
為什麼你的GuitarSpec要繼承InstrumentSpec?
10/20 12:07, 4F

10/20 12:08, 8年前 , 5F
因為很多樂器規格是共有的 所以GuitarSpec我也繼承了
10/20 12:08, 5F

10/20 13:58, 8年前 , 6F
不是有共同的屬性就要繼承啊 是取決於你要怎麼操作
10/20 13:58, 6F

10/20 14:01, 8年前 , 7F
兩個改法 1. GuitarSpec不要繼承InstrumentSpec
10/20 14:01, 7F

10/20 14:02, 8年前 , 8F
2. 吉他不要有GuitarSpec 直接用樂器的InstrumentSpec
10/20 14:02, 8F

10/20 14:03, 8年前 , 9F
指標指向GuitarSpec物件
10/20 14:03, 9F

10/20 20:05, 8年前 , 10F
謝謝以上各位的回答 Legendmtg大大說的沒錯
10/20 20:05, 10F

10/20 20:06, 8年前 , 11F
我仔細想了之後 好像不是必要繼承的 我可以把
10/20 20:06, 11F

10/20 20:07, 8年前 , 12F
guitarSpec當成是 吉他規格是跟樂器相比多出來的屬性
10/20 20:07, 12F

10/21 16:58, 8年前 , 13F
借文問一下 這樣的Case在CPP用template寫有跟Java、C#一樣便
10/21 16:58, 13F

10/21 16:58, 8年前 , 14F
利嗎@@ 最近剛開始從那兩個進到這裡來...
10/21 16:58, 14F

10/21 18:25, 8年前 , 15F
就這個 case 來講用 template 就和 generics 差不多
10/21 18:25, 15F
文章代碼(AID): #1PwCzSYm (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1PwCzSYm (C_and_CPP)