C++_CH17_枚举

C++_CH17_枚举

1.1 定义

枚举(ENUM),是enumeration的缩写。是为了让一组数值集合成为一种类型。

1.2一个例子

#include 

enum Example
{
	A,B,C;//说明你想让哪些数成为组合,默认第一个为0,之后每一个加1
};

int a = 0;
int b = 1;
int c = 2;
//此时Example类型就只能赋这三个值
int main()
{
	Example val = 10;//这样会报错
}

枚举就是规定一个类型,这个类型是一些整数的集合。如果定义一个这个类型的变量,则这个变量的值只能在这一整数集合里取。

当然A、B、C的取值可以不是默认的这几个,可以自己赋值

#include 

enum Example
{
	A = 10,B = 100,C = 1000;//说明你想让哪些数成为组合,默认第一个为0,之后每一个加1//如果B、C不赋值,则默认是A的基础上加1.
};

int a = 0;
int b = 1;
int c = 2;
//此时Example类型就只能赋这三个值
int main()
{
	Example val = 10;//这样会报错
}

另外,还可以给enum规定一些整数簇,以节约内存的使用:

#include 

enum Example: unsigned char //从32位变为8位
{
	A = 10,B = 100,C = 1000;//说明你想让哪些数成为组合,默认第一个为0,之后每一个加1//如果B、C不赋值,则默认是A的基础上加1.
};

int a = 0;
int b = 1;
int c = 2;
//此时Example类型就只能赋这三个值
int main()
{
	Example val = 10;//这样会报错
}

整数簇有哪些:
数据归类
注意必须是整数簇,浮点簇就不行:

#include 

enum Example: float //报错
{
	A = 10,B = 100,C = 1000;//说明你想让哪些数成为组合,默认第一个为0,之后每一个加1//如果B、C不赋值,则默认是A的基础上加1.
};

int a = 0;
int b = 1;
int c = 2;
//此时Example类型就只能赋这三个值
int main()
{
	Example val = 10;//这样会报错
}

1.3 用enum给之前的日志类升级

之前我们有一个日志类:

#include

class Log	
{
public:
	const int LogLevelWarn = 0;
	const int LogLevelTrace = 1;
	const int LogLevelError = 2; //这一段就特别适合用enum

private://定义私有的一个变量,保存我们想要的log的level
	int m_LogLevel = LogLevelError;//默认定义为2

public:
	void SetLevel(int level)
	{
		m_LogLevel = level;//把外部我们给的level给m_LogLevel,对本来的2进行了修改
	}
		
	void warn(const char* message)
	{
		if(m_LogLevel >= LogLevelWarn)
		{
			std::cout<<""<<std::endl;
		}
	}

	void trace(const char* message)
	{
		if(m_LogLevel >= LogLevelTrace)
		{
			std::cout<<""<<message<<std::endl;
		}
	}

	void error(const char* message)
	{
		if(m_LogLevel >= LogLevelError)
		{
			std::cout<<""<<message<<std::endl;
		}
	}
};

int main()
{
	Log log; //创建一个Log类型的instance名字叫log‘
	log.SetLevel(log.LogLevelError);//使用log里的SetLevel方法,让我们输入希望展示的level层级,修改这里的参数,填入我们想要的层级。
	log.warn("Hello");//warn层级
	log.trace("Hello"); //追踪层级
	log.error("Hello"); //错误层级

}

用enum升级:

#include

class Log
{
public:
    enum LEVEL
    {
        levelWARN = 0, levelTRACE, levelERROR // 枚举类型命名更清晰
    };

private:
    LEVEL m_LogLevel = levelERROR; // 使用枚举类型别名

public:
    void SetLevel(LEVEL level)
    {
        m_LogLevel = level;
    }
    
    void warn(const char* message)
    {
        if(m_LogLevel <= levelWARN) // 修正条件检查,确保级别足够低
        {
            std::cout<<" "<<message<<std::endl; // 输出消息
        }
    }

    void trace(const char* message)
    {
        if(m_LogLevel <= levelTRACE) // 同上
        {
            std::cout<<" "<<message<<std::endl; // 输出消息
        }
    }

    void error(const char* message)
    {
        if(m_LogLevel <= levelERROR) // 同上
        {
            std::cout<<" "<<message<<std::endl; // 输出消息
        }
    }
};

int main()
{
    Log log; // 创建Log实例
    log.SetLevel(Log::levelERROR); // 修正SetLevel的参数使用
    log.warn("Hello");
    log.trace("Hello");
    log.error("Hello");

    return 0; // 添加返回值
}

output:
Hello

你可能感兴趣的:(c++,开发语言)