c++ 有多个类用到了相同的属性和方法,但是又不能提到基类层级,有什么好办法减少代码的重复吗?

2017-08-02 16:58:57 +08:00
 iamzhuyi

再加一个类,让多个类继承新加的类?想不到别的方法了。。。。

1885 次点击
所在节点    问与答
13 条回复
sikariba
2017-08-02 17:03:40 +08:00
用虚基类也不行么?
mooncakejs
2017-08-02 17:07:17 +08:00
c++ 可以直接多重继承啊。
YyYyYyy
2017-08-02 17:41:49 +08:00
把共同的部分拆成一个组件类,给每个类加上这个组件

根据你的业务逻辑可能还可以参考其他模式比如命令模式

多重继承不是不能用,如果能用设计模式回避掉的话那就不去用多重继承。要是换个语言也不一定有多重继承给你用。
iamzhuyi
2017-08-02 17:48:23 +08:00
@YyYyYyy 是的,我们组长是绝不可能让我们用多重继承的。。。
geelaw
2017-08-02 17:57:59 +08:00
属性?

多继承+虚拟基类( C++版接口)
geelaw
2017-08-02 18:01:25 +08:00
另一个方法:设原基类叫 Base,建立一个叫 Base2 的类继承 Base,然后加上这些玩意儿,然后让其他类继承 Base2。

我感觉不能提到基类多半是因为 ABI 吧,这样就可以保以前的代码都对。
YyYyYyy
2017-08-02 18:16:50 +08:00
@geelaw 我个人觉得在有属性的情况下还是避免用接口比较好(当然 C++实现的“接口”没有那么严格要求只有 method,的确可以放些 field 进去简化工作)

LZ 你要不说下业务逻辑?
morefreeze
2017-08-02 20:55:36 +08:00
不提到基类不让继承那就用组合?写个类,然后用到的类直接把这个当成员
veelog
2017-08-02 21:09:02 +08:00
委托模式?
harry890829
2017-08-02 21:13:33 +08:00
这种情况下,提炼出一个类,里面是 static 的成员?不过这个确实也看实际的函数使用场景,要是能够从类中独立出来的话应该没什么问题
Miy4mori
2017-08-02 21:16:13 +08:00
继承不行就组合呀
derek80
2017-08-02 22:18:48 +08:00
重合的独立拿出来,组合一下
acros
2017-08-02 23:12:00 +08:00
信息不够啊,但多重继承肯定被排除的···

能想到的可选项:
1. 抽离出一个独立类,而且 API 很可能是静态的吧。一般这个可能性最大吧,大一点的项目都有 Utils 类什么的。
2. 做成类的一个 Component (这个叫什么模式来着,组合模式?)
3. 独立一个类,API 只开放给友元(似乎有点变态?)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/379863

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX