【发布时间】:2017-06-22 22:58:10
【问题描述】:
我有一个独特的案例,我需要两层接口,并希望有两层类来实现它们:
class IFood {
public:
virtual ~IFood() = default;
virtual int GetColor() const = 0;
};
class IFruit : public IFood {
public:
virtual int GetAverageSeedCount() const = 0;
};
class GreenFood : public IFood {
virtual int GetColor() const override {return GREEN;}
};
class GreenApple : public GreenFood, public IFruit {
virtual int GetAverageSeedCount() const override {return 5;}
};
(我意识到这些接口并不完全合理。抱歉。)
在某些情况下,我可能有一个 IFood 对象的集合,但在其他情况下,我将有一个 IFruit 对象的集合。实际上,IFood 所代表的接口有 5-8 个函数。
如果这段代码可以编译并运行,我会被设置。不幸的是,它失败了,因为编译器没有意识到GreenApple 实现了IFood API(缺少GetColor)。这确实存在于我们扩展的基础GreenFood 中,但拆分接口实现似乎并不能让编译器满意。
对于 IFood 中的每个函数,我可以让 IFruit 实现它并直接调用 ParentClass::functionName()。但是在 IFood 中有 5-8 个函数和数十种潜在的水果类型,这并不像我想要的那样优雅。
我很好奇是否有任何解决方案可以让编译器在父类中找到这些缺失的 API,或者有什么好方法可以让我重组我的接口以保持优雅?
如果需要,我可以提供更具体的示例。感谢您的任何提示!
【问题讨论】:
标签: c++ oop c++11 multiple-inheritance