enum枚举类型的用法

      我们在写程序的时候,常常要定义一组与对象有关的属性,例如,一个文件可能会以三种状态(输入,输出和追加)之一被打开。典型的情况下,我们通过吧每个属性和一个唯一的const值相关联,来记录这些状态值。因此我们可能会写到:

并按如下方式使用这些常量:

尽管这样也能奏效,但是它却存在许多的缺点,其中一个主要的缺点就是:我们没有办法限制传递给函数的值只能是input,output,append这三个之一。

枚举提供了一种替代的方法,它不但定义了整数常量,而且还把它们组合成一个集合。例如:

 

 open_modes是一个枚举类型,每个被命名的枚举定义了一个唯一的类型,它可以被用作类型标识符,例如:

input,output和append是枚举成员,它们代表了能用来初始化和赋值open_modes类型变量的值的全集。例如:

如果我们试图向上面的函数传递一个input,output和append以外的值,编译器就会产生编译错误,而且如果像下面这样传递一个相等的整数值,编译器仍然会将它标记为错误:

我们不能做到的是打印枚举成员的实际枚举名,当我们这样写的时候:

cout<<input<<" "<<om<<endl;

输出为:

1 3

一种解决的方案是定义一个由枚举成员的值索引的字符串数组,因此,我们可以这样写:

cout<<open_mode_table[input]<<""<<open_mode_table[om]<<endl;

输出为:

input append

第二件不能做的事情是,我们不能使用枚举成员函数进行迭代,如:

//不支持

for(open_modes iter=input;iter!=append;++iter)

//...

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值