c ++多重继承函数合并

时间:2011-10-07 05:46:52

标签: c++ inheritance multiple-inheritance

我有:

class XILightSource 
{
public:
    virtual XVec2 position() const = 0;
};

class XLightSprite : public XSprite, public XILightSource
{

};

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

4 个答案:

答案 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
{
};