C++枚举
ENUM
- 即enumeration, 是一个数值集合,也是给一个值命名的方法;
- 可以帮助我们将一组数值集合作为类型,而不仅仅是用整型作为类型;
- 但是,只是一种命名值的方法,当想使用整数来表示某些状态或某些数时,非常有用
例1
int A = 0;
int B = 1;
int C = 2;
int value = B;
if (value == B)
{
}
现在,我们希望能定义一种类型,只能是A, B, C三种中的一种
enum Example
{
A, B, C
};
int a = 0;
int b = 1;
int c = 2;
Example value = B;
Example value = 5;
报错,因为Example只能取A, B, C三个数中的一个。
此外,默认第一个是0, 第二个是1, 第三个是2, 所以A=0, B= 1, C=2
指定想要给枚举赋值的整数类型
enum Example: unsigned char
{
A, B, C
};
int a = 0;
int b = 1;
int c = 2;
注意:不能使用float,因为float不是整型;
再次强调:枚举只是给特定的值命名的一种方式,这样就不用在各种地方,处理各种整数
在Log类使用enum
例2
class Log
{
public:
enum Level
{
LevelError = 0, LevelWarning, LevelInfo
};
private:
Level m_LogLevel = LevelInfo; // m前缀表明是私有成员变量
public:
void SetLevel(Level level)
{
m_LogLevel = level;
}
void Error(const char* message)
{
if (m_LogLevel >= LevelError) // 如果日志级别是0或更高,将打印这些信息
std::cout << "[ERROR]:" << message << std::endl;
}
void Warn(const char* message)
{
if (m_LogLevel >= LevelWarning) // 如果日志级别是1或更高,将打印这些信息
std::cout << "[WARNING]:" << message << std::endl;
}
void Info(const char* message)
{
if (m_LogLevel >= LevelInfo) // 如果日志级别是2或更高,将打印这些信息
std::cout << "[INFO]:" << message << std::endl;
}
};
int main()
{
Log log;
log.SetLevel(Log::LevelWarning);
log.Warn("Hello!");
log.Error("Hello!");
log.Info("Hello!");
std::cin.get();
}
注意:定义Class的函数时不要与enum里的命名冲突
为什么使用enum
可以使代码更加简洁