C++ c++;多重继承函数合并

C++ c++;多重继承函数合并,c++,inheritance,multiple-inheritance,C++,Inheritance,Multiple Inheritance,我有: 问题是XSprite已经具有相同的功能position。我怎样才能告诉编译器,我想使用XSprite::position函数作为XILightSource::position()的实现?重写它并调用XILightSource::position(): 只需添加一行: class XLightSprite : public XSprite, public XILightSource { public: XVec2 position() const { return XSpr

我有:


问题是
XSprite
已经具有相同的功能
position
。我怎样才能告诉编译器,我想使用
XSprite::position
函数作为
XILightSource::position()
的实现?

重写它并调用XILightSource::position():

只需添加一行:

class XLightSprite : public XSprite, public XILightSource
{
  public:
     XVec2 position() const { return  XSprite::position(); }
};

实际上,你不需要做任何特别的事情

默认情况下,在
XLightSprite
中实现
XVec2 position()常量将隐藏
XSprite
position()
,并作为对
XLightSource
中定义的虚拟函数的重写

但是,如果您想澄清您的意图是重写函数,那么可以添加一个using声明

class XLightSprite : public XSprite, public XILightSource
{
 public:
    using XSprite::position;
};

但是,请注意,如果XSprite中的position()也是同一格式的虚拟函数,那么新的实现也将作为XSprite中position的重写。

如果
类XSprite
已经具有该函数,那么最好的方法是将
XSprite
作为
XILightSource
的子级(因为它是抽象的)。这种方法的优点是您不必不必要地依赖多重继承

class XLightSprite : public XSprite, public XILightSource
{
 public:
    using XSprite::position;
    XVec2 position() const;
};

不起作用。XLightSprite仍然是抽象的。我认为,若XlightSourse::position不是纯的,那个么可以使用该解决方案
class XLightSprite : public XSprite, public XILightSource
{
 public:
    using XSprite::position;
    XVec2 position() const;
};
class XILightSource 
{
public:
  virtual XVec2 position() const = 0;
};

class XSprite : public XILightSource
{
public:
  virtual XVec2 position() const { ... }
};

class XLightSprite : public XSprite
{
};