【发布时间】:2016-10-23 07:59:06
【问题描述】:
我通常会在发布任何内容之前尝试在这里找到答案,但我什至不确定如何提出我的问题。
这就是我想要做的...我想定义一个基本接口和一个派生接口。然后,我想用额外的变量和方法来实现基本接口。最后,我想从实现的基本接口实现一个派生类,但也从派生接口实现。我不了解你,但我的头很痛。
如果我执行以下操作,我会在 DerivedFloat 代码下得到不明确的定义,因为该代码“看到”来自 IBase(通过 IDerivedFloat 继承)的 GetBaseValue 方法以及从 Base 继承的 GetBaseValue。
当然,必须有一种方法来派生一个使用基本实现的扩展特性的类,并确保它实现所需的 IDerivedFloat 方法。
现在...这是一个虚拟示例,用于展示我在概念上试图实现的目标。这不是现实生活中的例子。
template <typename VALUE_TYPE>
class IBase
{
public:
virtual VALUE_TYPE GetBaseValue() const = 0;
};
class IDerivedFloat : public IBase<FLOAT>
{
public:
virtual void SetBaseValue(const FLOAT & value) = 0;
};
// Implementation of Base
template <typename VALUE_TYPE>
class Base : public IBase<VALUE_TYPE>
{
public:
VALUE_TYPE GetBaseValue() const { return m_BaseValue; }
protected:
VALUE_TYPE m_BaseValue;
}
// Uses expanded Base AND implements IDerivedFloat
class DerivedFloat : public Base<FLOAT>, public IDerivedFloat
{
public:
void SetBaseValue(const FLOAT & value) { m_BaseValue = value };
}
【问题讨论】:
-
我通常会在发布任何内容之前尝试在这里找到答案 -- 所以你在任何搜索中都没有找到“钻石继承”或virtual inheritance?跨度>
-
不是 C++ 专家。我第一次听说钻石继承这个词。至于“虚拟继承”,我有。但很明显,从您的评论来看,我不知道如何利用这些信息来解决我的问题。
-
您是否点击了我评论中的链接?它基本上是您接受的答案的副本。
标签: c++ inheritance interface