这是我参与8月更文挑战的第27天,活动详情查看:8月更文挑战
枚举
介绍
在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。这两种类型经常(但不总是)重叠。
枚举在C/C++/c#中,是一个被命名的整型常数的集合, 枚举在日常生活中很常见。
例如表示星期的SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,就是一个枚举。
-
我们学习过单例模式,即一个类只有一个实例。而枚举其实就是多例,一个类有多个实例,但实例的个数不是无穷的,是有限个数的。例如word文档的对齐方式有几种:左对齐、居中对齐、右对齐。开车的方向有几种:前、后、左、右!
我们称呼枚举类中实例为枚举项!一般一个枚举类的枚举项的个数不应该太多,如果一个枚举类有30个枚举项就太多了! -
定义枚举类型
定义枚举类型需要使用enum关键字
枚举的说明与结构和联合相似, 其形式为:
enum 枚举名{
标识符[=整型常数],
标识符[=整型常数],
…
标识符[=整型常数]
} 枚举变量;
如果枚举没有初始化,即省掉"=整型常数"时, 则从第一个标识符开始,顺次赋给标识符0, 1, 2, …。但当枚举中的某个成员赋值后,其后的成员按依次加1的规则确定其值。
枚举类形类似于宏定义,相当于建立起物理世界和程序之间的联系,可以简单地理解为利用 #define 构建了表示结构,程序通过枚举限制变量的取值范围。
所有枚举类都是Enum的子类所有枚举类都默认是Enum类的子类,无需我们使用extends来继承。这说明Enum中的方法所有枚举类都拥有。
实例
#include <stdio.h>
#define class_1 0
#define class_2 1
int main()
{
int i;
enum week{
Monday,//当不给特定值时,第一个变量自动等于0
Tuesday,//这里是1
Wednesday
Thursday,
Friday,
Saturday,
Sunday
};//枚举里为整数
week day;
day=Monday;
printf("今天是星期:%d\n",day);
day=Tuesday;
printf("今天是星期:%d\n",day);
day=Wednesday;
printf("今天是星期:%d\n",day);
day=Thursday;
printf("今天是星期:%d\n",day);
return 0;
}
当给定枚举中的值时:
#include <stdio.h>
#define class_1 0
#define class_2 1
int main()
{
int i;
enum week{
Monday=1,//当不给特定值时,第一个变量自动等于0
Tuesday,//这里是2
Wednesday=5,//当从中间给一个特定值时,后面的从这个特定值开始
Thursday,//这时这个值应当是6
Friday,
Saturday,
Sunday
};//枚举里为整数
week day;
day=Monday;
printf("今天是星期:%d\n",day);
day=Tuesday;
printf("今天是星期:%d\n",day);
day=Wednesday;
printf("今天是星期:%d\n",day);
day=Thursday;
printf("今天是星期:%d\n",day);
return 0;
}
注:枚举的遍历
//如果想把星期一到星期日都输出 //遍历枚举输出枚举值 以下这个方法很多语言中是可以的,但C中不可以 for (day=Monday;day<=Sunday;day++) { printf("今天是星期:%d\n",day); } //下面这种遍历的结果是遍历的整体,而不是其中在前面定义中的week中的所有
for (i=0;i<=7;i++) { day=week(i); printf("%d\n",day); } //无论前面的Monday等定义的是什么值,这个遍历的结果都是0到7