C++ 如何设计一个只能采用一组离散值的类,例如红绿蓝

C++ How to design a class that can take on only a discrete set of values, e.g. Red Green Blue

本文关键字:一组 一个 C++      更新时间:2023-10-16
例如

,假设我们想要设计一个颜色类,假设我们只允许 3 种不同的颜色值:红色、绿色、蓝色。

这在C++中通常如何实现?或者更好的是,这方面的一般设计模式是什么?

我能想到的唯一方法是在 Color 类中初始化 3 种不同的静态颜色,使 colorCode 无法访问,并仅允许使用已经存在的 Color 构造新颜色。

class Colour
{
public:
    static const Colour Red;
    static const Colour Green;
    static const Colour Blue;
    Colour(){}
    bool operator==(const Colour &other) const{
        if(other.colourCode == this->colourCode){return true;}else{return false;}
    }
    Colour & operator=(const Colour & other){
        this->colourCode = other.colourCode;
    }
    Colour(const Colour & other){
        *this = other;}
private:
    int colourCode;
    Colour(int colourCodeIn){
        colourCode = colourCodeIn;
    }
};
const Colour Colour::Red(1);
const Colour Colour::Green(2);
const Colour Colour::Blue(3);
class Pen
{
public:
    Pen(){}
    void setColour(const Colour & infarbe){
        farbe = infarbe;
    }
    Colour farbe;
};
int main()
{
    Pen myPen1;
    myPen1.setColour(Colour::Blue);
    return 0;
}

使用 enumenum class

引用:

  • Cpp首选项包含所有详细信息,并完全涵盖了您的RGB示例。
  • 亚历克斯·阿兰(Alex Allain(详细阐述了enum class的好处,并用RGB进行了说明。
相关文章: