首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >接口的菱形继承(C++)

接口的菱形继承(C++)
EN

Stack Overflow用户
提问于 2018-07-20 05:08:01
回答 1查看 65关注 0票数 1

我偶然发现了一个钻石继承问题,我不确定最好的解决方案。下面的代码工作正常,没有菱形问题:

代码语言:javascript
复制
class Element { /* pure virtual functions */ };
class Diode : public Element {};
class Thyristor : public Diode {};

虽然我不喜欢公共继承,因为晶闸管不是二极管,它只是经常像二极管一样工作,所以我想用很多二极管代码。我可以通过使用组合而不是继承来让它工作,但这会导致二极管和晶闸管之间的内部数据结构重复,这是我不喜欢的。我想做的是使用私有继承。如果我这样做,那么晶闸管还需要公开继承Element:

代码语言:javascript
复制
class Thyristor : public Element, private Diode {};

潜在的问题是,我现在已经创建了一个菱形,因为元素是直接通过Diode继承的。如果元素是一个纯虚函数,这是一个问题吗?如果是,那么解决这个问题的正确方法是什么,只对晶闸管类进行更改?

EN

回答 1

Stack Overflow用户

发布于 2018-07-20 06:35:46

在这种情况下,您肯定应该使用聚合而不是继承。

只要回溯一下,问问自己:为什么我要在这里继承?晶闸管和二极管如何在外部代码中使用?很快你就会发现你不需要继承元素,只需要聚合必要的行为(联系的数量,传导行为等)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51431726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档