作者dwight90488 (陈佳佳)
看板C_and_CPP
标题[问题] 继承与聚合
时间Fri Oct 20 00:14:17 2017
开发平台(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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1508429660.A.8B0.html
※ 编辑: dwight90488 (1.163.159.95), 10/20/2017 00:15:08
1F:→ PkmX: 你这样guitar里面会有两个独立的*Spec成员 10/20 00:21
2F:推 z1976: 因为乐器规格是动态型别,所以建议用指标 10/20 02:33
3F:→ z1976: 用智慧型指标不用管理delete 10/20 02:33
4F:推 legendmtg: 为什麽你的GuitarSpec要继承InstrumentSpec? 10/20 12:07
5F:→ dwight90488: 因为很多乐器规格是共有的 所以GuitarSpec我也继承了 10/20 12:08
6F:推 legendmtg: 不是有共同的属性就要继承啊 是取决於你要怎麽操作 10/20 13:58
7F:推 legendmtg: 两个改法 1. GuitarSpec不要继承InstrumentSpec 10/20 14:01
8F:→ legendmtg: 2. 吉他不要有GuitarSpec 直接用乐器的InstrumentSpec 10/20 14:02
9F:→ legendmtg: 指标指向GuitarSpec物件 10/20 14:03
10F:→ dwight90488: 谢谢以上各位的回答 Legendmtg大大说的没错 10/20 20:05
11F:→ dwight90488: 我仔细想了之後 好像不是必要继承的 我可以把 10/20 20:06
12F:→ dwight90488: guitarSpec当成是 吉他规格是跟乐器相比多出来的属性 10/20 20:07
13F:→ y3k: 借文问一下 这样的Case在CPP用template写有跟Java、C#一样便 10/21 16:58
14F:→ y3k: 利吗@@ 最近刚开始从那两个进到这里来... 10/21 16:58
15F:→ uranusjr: 就这个 case 来讲用 template 就和 generics 差不多 10/21 18:25