我有:
class XILightSource
{
public:
virtual XVec2 position() const = 0;
};
class XLightSprite : public XSprite, public XILightSource
{
};
问题是XSprite
已经具有相同的功能position
。我怎么能对编译器说,我想使用XSprite::position
函数作为XILightSource::position()
的实现?
答案 0 :(得分:6)
覆盖它并调用XILightSource :: position():
class XLightSprite : public XSprite, public XILightSource
{
public:
XVec2 position() const { return XSprite::position(); }
};
答案 1 :(得分:0)
只需添加一行:
class XLightSprite : public XSprite, public XILightSource
{
public:
using XSprite::position;
};
答案 2 :(得分:0)
实际上,你不需要做任何特别的事情。
默认情况下,在XVec2 position() const
中实施XLightSprite
会隐藏position()
的{{1}},并作为XSprite
中定义的虚拟函数的覆盖。
但是,如果您想澄清您的意图是覆盖该功能,您可以添加使用声明
XLightSource
但请注意,如果XSprite中的position()也是同一格式的虚函数,则新实现也将作为XSprite中位置的覆盖。
答案 3 :(得分:0)
如果class XSprite
已经具有该功能,那么最好的方法是让XSprite
成为XILightSource
的孩子(因为它是抽象的)。这种方法的优点是您不必不必要地依赖多重继承。即。
class XILightSource
{
public:
virtual XVec2 position() const = 0;
};
class XSprite : public XILightSource
{
public:
virtual XVec2 position() const { ... }
};
class XLightSprite : public XSprite
{
};