gpt4 book ai didi

c++ - 接口(interface)的菱形继承(C++)

转载 作者:太空宇宙 更新时间:2023-11-04 12:46:12 25 4
gpt4 key购买 nike

我偶然发现了菱形继承(钻石问题)问题,但我不确定最佳解决方案。以下代码有效并且没有菱形问题:

class Element { /* pure virtual functions */ };
class Diode : public Element {};
class Thyristor : public Diode {};

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

class Thyristor : public Element, private Diode {};

潜在的问题是我现在创建了一个钻石,因为 Element 是直接通过 Diode 继承的。如果 Element 是纯虚函数,这是一个问题吗?如果是,解决此问题的正确方法是什么,仅对晶闸管类进行更改?

最佳答案

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

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

关于c++ - 接口(interface)的菱形继承(C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51431726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com