C++学习笔记之七 复合类型---枚举
来源:互联网 发布:mac mysql dmg 安装 编辑:程序博客网 时间:2024/05/01 05:18
C++的enum工具提供了另一种创建符号常量的方式,这种方式可以代替const。使用enum的句法与使用结构相似,例如:enum spectrum { red, orange , yellow, green, blue, violet, indigo ,ultraviolet};
这条语句有两个含义:
(1)、让spectrum成为新类型的名称:spectrum被称为枚举,就像struct变量被称为结构一样
(2)、将red 、orange、yellow等作为符号常量,它们对应的整数值0~7.这些常量叫做枚举量。
这个地方需要做一下说明:spectrum是类型名称,就像int、long一样,是类型的名称,以后可以用这个类型名称声明变量。另外,用这个类型声明的变量取值必须是大括号里的值,其他值无效。而且默认的情况下,第一个枚举量的值为0,第二个为1,以此类推。也可以显示的指定整数值来覆盖默认值。
可以用枚举名来声明这种类型的变量:spectrum band;
下面介绍一下枚举变量的特殊属性:
1、在不进行强制类型转换的情况下,只能将定义枚举时使用的枚举量赋给这种枚举的变量。
band = blue; //有效,因为blue是枚举量中的一个
band =2000; //无效,2000不是枚举量
因此,spectrum变量受到限制,只有8个可能的值,试图将非enum值赋给enum变量出现编译器错误。
2、对于枚举,只定义了赋值运算符。具体来说,没有为枚举定义算数运算符
band = orange; //有效
++band; //无效
band = orange +red; //无效
3、枚举量是整型,可被提升为int类型,但是int类型不能自动转换为枚举类型。
int color = blue; //有效
band = 3; //无效,虽然3对应的green,但是不能这么赋值。除非经过强制类型转换band = spectrum(3);
color = 3+ red; //有效
4、当然,如果打算只使用常量,而不创建枚举类型的变量,则可以省略枚举类型的名称。如下:
enum { red, orange , yellow, green, blue, violet, indigo ,ultraviolet};
5、设置枚举量的值
可以使用赋值运算符来显式的设置枚举量的值:
enum bits{ one = 1, two =2, four =4, eight =8};
指定的值必须是整数。也可以只显式的定义其中一些枚举量的值:
enum bigstep{ first, second =100, third};
这里first默认情况下是0,后面没有被初始化的枚举量的值将比其前面的枚举量大1.因此,third的值为101。
另外,可以创建多个值相同的枚举量:
enum {zero, null = 0, one, numero_uno =1};
其中,zero和null都为0,one和umero_uno都为1。
说明:其实枚举量可以作为一种创建整数与代表字符的对应关系。比如用在switch语句中,先用enum{one,two,three,...},在switch语句中就可以用case one: case two: ....了。
6、枚举的取值范围
每个枚举值都有取值范围,通过强制类型转换,可以将取值范围中的任何整数值赋给枚举变量,即使这个值不是枚举值。例如:
enum bits{ one =1, two = 2, four = 4, eight = 8};
bits myflag;
则下面的代码将是合法的:
myflag = bits(6); //因为6在bits的范围之内
取值范围是这么定义的:
(1)上限值:找到大于这个最大值的、最小的2的幂,将它减去1,得到的便是取值范围的上限。例如,bitstep的最大值枚举值为101.在2的幂中,比这个数大的最小值为128,因此取值范围的上限为127.
(2)下限值:需要知道枚举值的最小值,如果它不小于0,则取值范围的下限为0;否则采用与寻找上限方式相同的方式,但加上负号。例如,如果最小枚举值是-6,而比它小的、最大的2的幂是-8(加上负号),因此下限是-7.
- C++学习笔记之七 复合类型---枚举
- c++primer plus复合类型之枚举
- c++primer学习笔记-----2.3复合类型
- C语言学习笔记(4)类型转化,复合类型
- C++学习笔记之六 复合类型之共用体
- C语言学习笔记(五)——复合类型
- .NET学习笔记(七) ------字符串,枚举类型
- C++学习笔记:复合类型
- C++Primer之复合类型
- C++学习序列笔记之数据处理(复合类型)
- C++学习笔记之四 复合类型1
- c++学习笔记之复合类型(c++ primer plus)
- 黑马程序员----C 语言学习笔记之枚举类型和typedef关键字
- C#学习笔记之七:结构和枚举
- 《c++primer笔记》复合类型--引用
- c++primer笔记--2.3复合类型
- 学习C++——复合类型
- c++学习笔记(1)复合类型
- IntelliSense: 应输入声明的解决方案
- 我的Android进阶之旅------>解决Jackson等第三方转换Json的开发包在开启混淆后转换的实体类数据都是null的bug
- map映照容器
- 用PHP写自定义的简单WEB服务器
- Android Intent意图详解
- C++学习笔记之七 复合类型---枚举
- POJ3487 The Stable Marriage Problem
- NYOJ171 聪明的kk
- C语言中int类型数的表示范围及形式
- HDU1010-Tempter of the Bone
- Git学习7:Git中的里程碑
- 【Android动画九章】-AlphaAnimation(渐变动画)
- 测试基于gtid模式主从复制下数据不一致的处理
- IO学习(三)常见IO类继承关系图