C/C++:[2]enum-枚举量声明、定义和使用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C/C++:[2]enum-枚举量声明、定义和使用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3466字,纯文字阅读大概需要5分钟。
内容图文
![C/C++:[2]enum-枚举量声明、定义和使用](/upload/InfoBanner/zyjiaocheng/1327/5fc3392f175e4bef90440af194b76557.jpg)
C/C++:[2]enum-枚举量声明、定义和使用
转自:http://jingyan.baidu.com/article/e75aca85526c1b142edac6d9.html
众所周知,C/C++语言可以使用#define和const创建符号常量,而使用enum工具不仅能够创建符号常量,还能定义新的数据类型,但是必须按照一定的规则进行,下面我们一起看下enum的使用方法。
![技术分享](/upload/getfiles/default/2022/11/16/20221116122851557.jpg)
步骤1——枚举量的声明和定义
-
1
首先,请看下面的语句:
enum enumType {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday};
这句话有两个作用:
第一:声明enumType为新的数据类型,称为枚举(enumeration);
第二:声明Monday、Tuesday等为符号常量,通常称之为枚举量,其值默认分别为0-6。(后面会介绍怎样显式的初始化枚举量的值)
-
2
接着利用新的枚举类型enumType声明这种类型的变量:
enumType Weekday;
就像使用基本变量类型int声明变量一样,如 int a;
然而与基本变量类型不同的地方是,在不进行强制转换的前提下,只能将定义的枚举量赋值给该种枚举的变量,如:
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);
结果将是不确定的,这么做不会出错,但得不到想要的结果。
END
步骤2——自定义枚举量的值
-
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
第二条还说明另外一个现象,就是枚举量的值可以相同。
END
步骤3——枚举的取值范围
-
1
前面讲到可以通过强制转换将其他类型值赋给枚举变量:
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的幂);
END
步骤4——枚举应用
-
个人觉得枚举和switch是最好的搭档:
enum enumType{Step0, Step1, Step2}Step=Step0;
/ /注意这里在声明枚举的时候直接定义了枚举变量Step,并初始化为Step0
switch (Step)
{
case Step0:{...;break;}
case Step1:{...;break;}
case Step2:{...;break;}
default:break;
}
END
注意事项
-
在实际应用中,枚举常常用来定义符号常量。
自己实现的示例代码如下:
1 #include <iostream> 2 3 4enum WeekType 5{ 6 Sun =0, 7 Mon =1, 8 Tue, 9}; 1011void CallWeek(WeekType wk) 12{ 13switch(wk) 14 { 15case Sun: 16 std::cout<<"周一......"<<std::endl; 17break; 18case Mon: 19 std::cout<<"周二......" <<std::endl; 20break; 21case Tue: 22 std::cout<<"周三......" <<std::endl; 23break; 24default: 25 std::cout<<"Waring......" <<std::endl; 26break; 27 } 2829} 30313233int main(int argc,char **argv) 34{ 35 WeekType iWk=WeekType::Mon; 36int a =WeekType::Tue; 3738switch(a) 39 { 40case0: 41 std::cout<<"周一......"<<std::endl; 42break; 43case1: 44 std::cout<<"周二......" <<std::endl; 45break; 46case2: 47 std::cout<<"周三......" <<std::endl; 48break; 49default: 50 std::cout<<"Waring......" <<std::endl; 51break; 52 } 5354 CallWeek(iWk); 5556return0; 57 }
原文:http://www.cnblogs.com/flylong0204/p/4331349.html
内容总结
以上是互联网集市为您收集整理的C/C++:[2]enum-枚举量声明、定义和使用全部内容,希望文章能够帮你解决C/C++:[2]enum-枚举量声明、定义和使用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。