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 {}
有没有办法覆盖派生类中基类的继承?也就是说,是否可以用玄武岩中的DarkGrey覆盖Gray的继承?
答案 0 :(得分: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();
}
};
答案 1 :(得分:1)
您无法重新定义类型,只能创建新类型。 所以在本质上你写的时候
class Basalt : public Rock, public DarkGrey {}
more或多或少暗示
class Basalt : public Material, public Grey {}, public DarkGrey {}
此处DarkGrey
并不替换Grey
,它会在其旁边添加