枚举

80 阅读1分钟

枚举

就是把可能的值一一列举

比如:月份有12个月份,可以一一列举

3.1枚举类型的定义

enum Day
{
	Mon,
	Tues,
	Wed,
	Thur,
};
enum Sex
{
    MALE,
    FEMALE,
    SECRET
};

以上定义的enum Day 是枚举类型

{}中的内容是枚类型的可能取值,也叫枚举常量

这些可能取值都是有值的,默认从0开始,一次递增1,当然在定义的时候也可以赋初值

未赋初值:

enum Day
{
	Mon,
	Tues,
	Wed,
	Thur,
	Sun
};
int main()
{
	printf("%d\n", Mon);
	printf("%d\n", Thur);
	printf("%d\n", Sun);
	return 0;
}

枚举常量的初值.png

赋初值:

enum Day
{
	Mon=1,
	Tues,
	Wed,
	Thur,
	Fri,
	Sat,
	Sun
};
int main()
{
	printf("%d\n", Mon);
	printf("%d\n", Tues);
	printf("%d\n", Wed);
	printf("%d\n", Thur);
	printf("%d\n", Fri);
	printf("%d\n", Sat);
	printf("%d\n", Sun);
	return 0;
}

赋了初值的枚举常量的结果.png

3.2枚举的优点

1.增加代码的可读性和可维护性

比如通讯录的1.add 2.del 3.search 4.modify 5.show 6.sort 0.exit 使用枚举:

enum Option
{
    EXIT(0),
    ADD,
    DEL,
    SEARCH,
    MODIFY,
    SHOW,
    SORT
};

后面的switch结构中的case 1可以改为case ADD,以此类推

2.和#define定义的标识符比较枚举有类型检查,更加严谨(在c++中更明显)

enum Day
{
    //枚举常量,无法被修改值
	Mon=1,
	Tues,
	Wed,
	Thur,
	Fri,
	Sat,
	Sun
};
int main()
{ 
    enum Day d = 5;//1.
    enum Day d = fri;//2.
    return 0;
}

在c++中会报错(1.),初始化:无法从int转换为“Day”,即进行类型检查

3.防止了命名污染(封装)

4.便于调试

#define需要完成替换

#define M 100
int main()
{
	enum Day d = Fri;
	int m = M;
	return 0;
}

枚举便于调试的直观图.png

调试在预处理之后,所以调试的时候无法很好地观察M的变化

而枚举不需要完成替换

5.使用方便,一次可以定义多个常量

不用像#define那样定义一个常量之前都需要敲一次#define