枚举

我们经常需要为某些属性定义一组可选择的值.例如,文件打开的状态可能会有三种:输入、输出和追加.记录这些状态值的一种方法是使每种状态都与一个唯一的常数值相关联.我们可能会这样编写代码:

const int input=0;
const int output=1;
const int append=2;
虽然这种方法也能奏效,但是它有个明显的缺点:没有指出这些值是相关联的.(因为这些操作都是关联文件打开的) 

枚举(enumeration)提供了一种替代的方法,不但定义了整数常量集,而且还把它们聚集成组.

1.定义和初始化枚举.

枚举的定义包括关键字enum,其后是一个可选择的枚举类型名,和一个用花括号括起来、用逗号分开的枚举成员(enumerator)列表.

//input is 0,output is 1,and append is 2
enum open_modes{input,output,append}

默认地,第一个枚举成员赋值为0,后面的每个枚举成员赋的值比前面的大1.

2.枚举成员是常量

可以为一个或多个枚举成员提供初始值,用来初始化枚举成员的值必须是一个常量表达式(constant expression).常量表达式是编译器在编译时就能够计算出结果的整形表达式.整型字面值常量是常量表达式,正如一个通过常量表达式自我初始化的const对象也是常量表达式一样.

例如,可以定义下列枚举类型:

//shape is 1,sphere is 2,cylinder is 3,polygon is 4
enum Forms {shape=1,sphere,cylinder,polygon};

在枚举类型Forms中,显式将shape赋值为1.其他枚举成员隐式初始化:sphere初始化为2,cylinder初始化为3,polygon初始化为4.

枚举成员值可以是不唯一的.

//point2d is 2,point2w is 3,point3d is 3,point 3w is 4
enum Points{point2d=2,point2w,
                        point3d=3,point3w};

本例中,枚举成员point2d显式初始化为2.下一个枚举成员point2w默认初始化,比前值大1,所以point2w初始化为3.枚举成员point3d显式初始化为3.因此point3w默认初始化为4.

不能改变枚举成员的值.枚举成员本身就是一个常量表达式,所以也可用于需要常量表达式的任何地方.

3.每个enum都定义一种唯一的类型.

每个enum都定义了一种新的类型.和其他类型一样,可以定义和初始化points类型的对象,也可以以不同的方式使用这些对象.枚举类型的对象的初始化或赋值,只能通过其枚举成员或同一枚举类型的其他对象来进行:

Points pt3d=point3d;  // ok:point3d is a Points enumerator   point3d是Points的枚举成员
Points pt2w=3;        // error:pt2w initialized with int                   pt2w整型初始化而枚举类型的对象的初始化或赋值,只能通过其枚举成员或同一枚举类型的其他对象来进行,而不能直接赋值.
pt2w=polygon;         // error:polygon is not a Points enumerator    polygon 不是Points的枚举成员
pt2w=pt3d;            // ok:both are objects of Points enum type      两个对象都是Points的枚举类型

注意把3赋给Points对象是非法的,即使3与一个Points枚举成员相关联.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值