C++ 枚举 ENUM

    C/C++语言可以使用#defineconst创建符号常量,而使用enum工具不仅能够创建符号常量,还能定义新的数据类型,但是必须按照一定的规则进行,下面我们一起看下enum的使用方法。

    一、枚举量的声明和定义

        num enumType {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday};

这句话有两个作用:

第一:声明enumType为新的数据类型,称为枚举(enumeration);

第二:声明Monday、Tuesday等为符号常量,通常称之为枚举量,其值默认分别为0-6。(后面会介绍怎样显式的初始化枚举量的值)

(2)接着利用新的枚举类型enumType声明这种类型的变量:enumType Weekday'就像使用基本变量类型int声明变量一样,如 int a;也可以在定义枚举类型时定义枚举变量enum enumType {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday}Weekday;

然而与基本变量类型不同的地方是,

    在不进行强制转换的前提下,只能将定义的枚举量赋值给该种枚举的变量,如:Weekday = Monday;或者Weekday = Sunday;不能将其他值赋给枚举变量,如:Weekday = 10;这是不允许的,因为10不是枚举量。也就是说Weekday只能是定义的Monday-Sunday这些定义过的枚举量。然而这不是绝对的,第六条会讲到利用强制类型转换将其他类型值赋给枚举变量

(3)上面讲不能将非枚举量赋给枚举变量,那么能不能将枚举量赋给非枚举变量呢?如:int a=Monday;这是允许的,因为枚举量是符号常量,这里的赋值编译器会自动把枚举量转换为int类型。

(4)前面讲可以对枚举进行赋值运算,那枚举变量能不能进行算术运算呢?

Weekday++;Weekday = Monday + Tuesday;这是非法的,因为这些操作可能导致违反类型限制,比如:Weekday = Sunday;

Weekday++;Weekday首先被赋予枚举量中的最后一个值Sunday(值为6),再进行递增的话,Weekday增加到7,而对于enumType类型来说,7是无效的。

    总结:对于枚举,只定义了赋值运算符,没有为枚举定义算术运算。

(5)不能对枚举量进行算术运算,那么枚举量能不能参与其他类型变量的运算呢?int a;a = 1 + Monday;这是允许的,因为编译器会自动把枚举量转换为int类型。

(6)第二条讲:在不进行强制转换的前提下,只能将定义的枚举量赋值给该种枚举的变量,言下之意就是可以通过强制转换将其他类型值赋给枚举变量:

Weekday = enumType(2);等同于:Weekday = Wednesday;但是,如果试图将一个超出枚举取值范围的值通过强制转换赋给枚举变量,会出现什么结果?

Weekday = enumType(20);结果将是不确定的,这么做不会出错,但得不到想要的结果。

二、自定义枚举量的值

(1)前面讲通过定义enum enumType {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday};

枚举量Monday、Tuesday等的值默认分别为0-6,我们可以显式的设置枚举量的值:

enum enumType {Monday=1, Tuesday=2, Wednesday=3, Thursday=4, Friday=5, Saturday=6, Sunday=7};

指定的值必须是整数

(2)也可以只显式的定义一部分枚举量的值:

enum enumType {Monday=1, Tuesday, Wednesday=1, Thursday, Friday, Saturday, Sunday};这样Monday、Wednesday均被定义为1,则Tuesday=2,Thursday、Friday、Saturday、Sunday的值默认分别为2、3、4、5.

    总结:未被初始化的枚举值的值默认将比其前面的枚举值大1。

(3)第二条还说明另外一个现象,就是枚举量的值可以相同。

三、枚举的取值范围


前面讲到可以通过强制转换将其他类型值赋给枚举变量:Weekday = enumType(2);这是合法的;但是Weekday = enumType(20);是非法的。这里涉及枚举取值范围的概念:枚举的上限是 大于最大枚举量的 最小的2的幂,减去1;

枚举的下限有两种情况:

    一、枚举量的最小值不小于0,则枚举下限取0;

    二、枚举量的最小值小于0,则枚举下限是 小于最小枚举量的 最大的2的幂,加上1。

举例来讲:

    假如定义 enum enumType1 { First=-5,Second=14,Third=10 };

    则枚举的上限是16-1=15(16大于最大枚举量14,且为2的幂); 

    枚举的下限是-8+1=-7(-8小于最小枚举量-5,且为2的幂);

四、枚举的应用


个人觉得枚举switch是最好的搭档:

        enum enumType{Step0, Step1, Step2}Step=Step0;//注意这里在声明枚举的时候直接定义了枚举变量Step,并初始化为Step0


switch (Step)

{

  case Step0:{...;break;}

  case Step1:{...;break;}

  case Step2:{...;break;}

  default:break;

}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++中的枚举类型(enum)是一种用户定义的数据类型,它用于定义一组命名的整数常量。枚举类型的语法如下: ```c++ enum 枚举类型名 { 枚举值1, 枚举值2, ... }; ``` 其中,枚举值可以是任何整数常量,如果没有显式地为枚举值指定值,则第一个枚举值默认为0,后续枚举值依次加1。例如: ```c++ enum Weekday { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday }; ``` 上述代码定义了一个Weekday枚举类型,其中Monday的值为0,Tuesday的值为1,以此类推。 可以通过以下方式定义枚举值的值: ```c++ enum Weekday { Monday = 1, Tuesday = 2, Wednesday = 3, Thursday = 4, Friday = 5, Saturday = 6, Sunday = 7 }; ``` 上述代码定义了一个Weekday枚举类型,与之前的定义不同的是,这里显式地为每个枚举值指定了值。 枚举类型可以用于定义变量、函数参数、函数返回值等,例如: ```c++ enum Weekday { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday }; Weekday today = Monday; void printWeekday(Weekday day) { switch (day) { case Monday: cout << "Monday" << endl; break; case Tuesday: cout << "Tuesday" << endl; break; case Wednesday: cout << "Wednesday" << endl; break; case Thursday: cout << "Thursday" << endl; break; case Friday: cout << "Friday" << endl; break; case Saturday: cout << "Saturday" << endl; break; case Sunday: cout << "Sunday" << endl; break; } } Weekday getNextDay(Weekday day) { return static_cast<Weekday>((day + 1) % 7); } ``` 上述代码定义了一个Weekday枚举类型以及一些与之相关的变量和函数。注意,在printWeekday函数中,我们使用了switch语句来根据传入的Weekday枚举值进行不同的操作。在getNextDay函数中,我们使用了static_cast将整数常量转换为Weekday类型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值