特殊类型结构--枚举

211 阅读3分钟

这是我参与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