【发布时间】:2017-05-15 15:12:30
【问题描述】:
我有两个接口:
class FirstInterface
{
virtual int getId() const = 0;
};
class SecondInterface
{
virtual void setId(int id) = 0;
};
这是一个组合界面:
class CombinedInterface : public FirstInterface, public SecondInterface
{
};
这是第一个接口的具体类:
class FirstConcrete : public FirstInterface
{
virtual int getId() const
{
return 1;
}
};
现在,这个类 CompleteConcrete 应该有 CombinedInterface 但想同时重用 FirstConcrete 的实现。
class CompleteConcrete : public FirstConcrete, public SecondInterface
{
virtual void setId(int id) { }
};
// This is wrong C++
// Cannot convert from CompleteConcrete * to CombinedInterface *
// CombinedInterface * combinedInterface = new CompleteConcrete();
这当然行不通。 有谁知道用 C++ 实现这个目标的方法吗?
【问题讨论】:
-
我可以使用虚拟继承来完成这项工作,并对层次结构进行一点小调整。如果您可以使其余的东西与虚拟继承一起使用,那将是一个答案。如果您不知道虚拟继承是什么意思,那么这可能不适合您。
-
你真的需要
CombinedInterface吗? -
您可以使用组合来重用实现。
-
@SamVarshavchik 我知道什么是虚拟继承,我不喜欢必须使用该技术的想法,但如果它能够实现目标而没有严重的副作用,我会使用它。请发表您的答案。
-
@Jarod42 是的,我需要它。它就像数据库的 ReadInterface 和 WriteInterface。现在我需要提供一个指向数据库的 ReadWriteInterface 的指针。有些客户端只需要 ReadInterface .. 有些需要两者。
标签: c++ inheritance interface multiple-inheritance