c ++覆盖继承是否可能和良好做法?

chr*_*ise 1 c++ design-patterns

c ++中的以下结构是否可行且推荐?

class IColour{}

class Grey: public IColour {}

class DarkGrey: public IColour {}

class IMaterial {}

class Rock: public Material, public Grey {}

class Basalt : public Rock, public DarkGrey {}
Run Code Online (Sandbox Code Playgroud)

有没有办法覆盖派生类中基类的继承?也就是说,是否有可能在玄武岩中用DarkGrey覆盖Gray的继承?

Ric*_*ges 6

继承描述了"是一种"的关系.

玄武岩不是一种"深灰色".可以说,将颜色描述为属性更好,因为每块岩石都有颜色,它不是一种颜色.

像这样的东西:

class IColour{};

class Grey: public IColour {};

class DarkGrey: public IColour {};

const IColour& dark_grey()
{
  static DarkGrey _ {};
  return _;
}

const IColour& grey()
{
  static Grey _ {};
  return _;
}

class IMaterial {
  virtual const IColour& get_colour() const = 0;
};

class Rock: public IMaterial
{
    const IColour& get_colour() const override {
        return grey();
    }
};

class Basalt : public Rock
{
    const IColour& get_colour() const override {
        return dark_grey();
    }
};
Run Code Online (Sandbox Code Playgroud)