C++ 如何设计一个只能采用一组离散值的类,例如红绿蓝
C++ How to design a class that can take on only a discrete set of values, e.g. Red Green Blue
例如
,假设我们想要设计一个颜色类,假设我们只允许 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;
}
使用 enum
或 enum class
。
引用:
- Cpp首选项包含所有详细信息,并完全涵盖了您的
RGB
示例。 - 亚历克斯·阿兰(Alex Allain(详细阐述了
enum class
的好处,并用RGB
进行了说明。
相关文章:
- C++有没有办法强制重写一组方法,如果其中一个方法在子类中具有重写?
- 给定一个枢轴点,按照它们与枢轴点构成的角度递增顺序对一组点进行排序
- 如果A("whole")有一组B("parts"),如何同步"part" B从A "whole"到另一个A的转移?
- C++ 如何设计一个只能采用一组离散值的类,例如红绿蓝
- 如何查找一组类型对是否包含一个元素作为第二个成员
- 如何在对一组中的一对之间找到一个元素
- 如何在球形空间中找到一组点,在无组织的点云中,特定半径在一个点附近
- 将一组数字相加或相减以达到一个值
- 我如何拥有一个在 c++ 中具有一组坐标的数组
- C :如何使一组派生的类能够访问一个类的私人成员
- 在C++中将一个对象添加到另一组对象中
- C++是否有任何方法可以将一组派生类存储在基类的一个向量中,并仍然访问它们的成员
- 在高性能计算中更好的做法是:将数据结构传递到一个函数或一组变量中
- 每次需要其中一个类的实例时,是否具有一组类的额外副本或从文件中读取更多内存
- 如何提取可变参数函数的一组选定参数,并使用它们调用另一个函数
- 如何让一组不同的子类对象从另一组共享基类的一个静态变量
- 实例化一个二维向量,其中一组对作为单元值
- 将一个结构与一组模式相匹配
- 一组数组添加到一个新数组
- 存储一组不重叠的范围,并严格查找一个值是否存在于任何一个范围中