假设我正在构建一个在屏幕上打印一些文本的简单类,它可以更改文本的颜色。
myclass a("this is the text");
a.setColor("green");
我还在学习C ++,最近我被介绍到enum
并且认为我会试一试。我想知道在enum
之类的接口函数中使用setColor
类型是否是一个好习惯?
在接口函数中使用enum
类有哪些优缺点?是否存在更适用的情况,以及是否存在使用不良的情况?
如果我想要合并属性怎么办? E.g。
a.setAttribute("bold reverse");
我不知道 interface 是否是我想要描述的内容的正确术语:我的班级用户最终会使用的函数。
答案 0 :(得分:8)
在您的情况下,(至少)有两个优点:
switch
语句中使用枚举变量。一个潜在的“缺点”是在颜色串来自例如运行时userinput(他们输入文本框或其他东西)。您将需要解析此字符串并将其转换为枚举。但这并不是一个缺点,因为无论如何你都需要这样做。最佳做法是让用户界面逻辑验证字符串并尽早转换为枚举。
如果我想要合并属性怎么办?
我至少可以考虑三种选择:
setAttribute
。|
结合使用。答案 1 :(得分:3)
是的,在这种情况下使用enum
似乎比实际字符串更好。
一个明显的优势 - 强力打字。
如果setColor
接受char*
,就像您的情况一样,您可以这样做:
a.setColor("horse");
,您只能在运行时检测为错误。
如果setColor
以eColors
为参数:
a.setColor(eGreen);
a.setColor(eRed);
会编译,但
a.setColor(eHorse);
不会。
答案 2 :(得分:0)
对于这种情况,枚举肯定比字符串更明确。至于值的连接,你可以使用一些小小的功能来完成这项工作。将枚举值设置为增加2的幂,然后可以将它们组合在一起。
enum TextAttributes {
Bold = 1,
Italic = 2,
Reverse = 4,
StrikeThrough = 8,
Underline = 16
};
TextAttributes attr = Bold | Reverse;