c++多重继承函数合并

c++ multiple inheritance function merging

本文关键字:合并 函数 多重继承 c++      更新时间:2023-10-16

我有:

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

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

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

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

只需添加一行:

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

实际上,您不需要做任何特殊的操作。

默认情况下,在XLightSprite中实现XVec2 position() const将隐藏XSprite中的position(),并作为XLightSource中定义的虚函数的覆盖。

然而,如果你想要澄清你的意图是重写函数,你可以添加using声明

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

请注意,但是,如果XSprite中的position()也是相同格式的虚函数,则新的实现也将作为XSprite中位置的覆盖。

如果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
{
};