从接口和实现C 继承
Inheriting from both an interface and an implementation C++
我通常在发布任何内容之前尝试在这里找到答案,但是我什至不确定如何提出我的问题。
所以这是我想做的...我想定义一个基本接口和一个派生的接口。然后,我想通过额外的变量和方法来实现基本接口。最后,我想从实现的基本接口,但也从派生的接口实现了一个派生类。我不认识你,但是我的头很痛。
如果我在下面做类似的事情,我会在派生的Float代码下获得模棱两可的定义,因为该代码从IBase中"看到"了getBaseValue方法,它是通过IDEREVEREVEREVERVLOAT继承的,以及从基础上继承的GetBaseValue。
。当然,必须有一种方法来得出使用基本实现的扩展功能的类,并确保它实现了所需的IDEREVEREVEREDFLOAT方法。
现在...这是一个虚拟示例,可以显示我在概念上尝试实现的目标。这不是现实生活中的例子。
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 };
}
您可以使用虚拟继承解决此问题:
class IDerivedFloat : virtual IBase<FLOAT>
{
public:
virtual void SetBaseValue(const FLOAT & value) = 0;
};
template <typename VALUE_TYPE>
class Base : virtual IBase<VALUE_TYPE>
{
public:
VALUE_TYPE GetBaseValue() const { return m_BaseValue; }
protected:
VALUE_TYPE m_BaseValue;
}
使用虚拟继承给出了基类成员的一个类实例,而不是从每次存在于类层次结构中的每个实例。
多重继承正是由于您遇到的歧义问题,但是有一些方法可以解决它。您必须明确地告诉编译器,通过用超级名称和双重船体领导函数调用来调用哪个超级函数。
。示例:
-c继承A和B。
-a和b都具有add()函数。
- 在C中,您必须说A :: add()或B :: add()才能告诉编译器要使用哪个。
链接以获取详细信息和更完整的实现:http://www.cprogramming.com/tutorial/multiple_inheritance.html
相关文章:
- 我应该避免多重实现继承吗
- 尝试使用继承和模板实现CRTP.Visual Studio正在生成编译器错误
- 类继承,ENUM 与 AST 类实现的问题
- C++ 使用接口和默认实现继承
- C++ 多重继承:使用基类 A 的实现实现基类 B 的抽象方法
- 将实现从继承的 CRTP 注入到继承的接口类
- 接口实现和私有继承之间的交互
- C 如何仅实现多个继承类的一个构造函数
- 是否可以使用继承在C++中实现弹性云服务器?
- 从基类(车辆)继承方法,从派生类(汽车)继承值,以使用 C++ 在另一个派生类(车道)中实现
- 使用多重继承实现实体组件编程
- GCC 看不到通过多重继承实现
- 简单继承实现中的构建错误"expected primary-expression before 'float' "来源
- 是否可以通过继承实现接口
- 如何使用多重继承实现多态行为
- 我们可以使用继承实现链表吗?
- c++是一种基于组件的体系结构,通过继承实现,被认为是良好的实践
- 单例继承c++实现
- 通过继承实现类似"二维"扩展的设计类
- 嵌套接口继承实现