枚举类型

枚举类型
我们在写程序的时候常常需要定义一组与对象相关的属性例如一个文件可能会以
三种状态输入输出和追加之一被打开
典型情况下我们通过把每个属性和一个唯一的const 值相关联来记录这些状态值
因此我们可能会这样写
const int input = 1;
const int output = 2;
const int append = 3;
并按如下方式使用这些常量
bool open_file( string file_name, int open_mode);
// ...
open_file( "Phoenix_and_the_Crane", append );
尽管这样做也能奏效但是它有许多缺点一个主要的缺点是我们没有办法限制传递
给函数的值只能是input output 和append 之一
 
枚举enumeration 提供了一种替代的方法它不但定义了整数常量而且还把它们组
成一个集合例如
enum open_modes{ input = 1, output, append };
open_modes 是一个枚举类型每个被命名的枚举定义了一个唯一的类型它可以被用作
类型标识符例如
void open_file( string file_name, open_modes om );
input output 和append 是枚举成员enumerator 它们代表了能用来初始化和赋值
open_modes 类型变量的值的全集例如
open_file( "Phoenix and the Crane", append );
如果我们试图向open_file()传递一个input output append 之外的值就会产生编译错
误而且如果像下面这样传递一个相等的整数值编译器仍然会将其标记为错误。
 
枚举不能迭代
枚举不能直接得到枚举的名称
可以显式地把一个值赋给一个枚举成员这个值不必是唯一的,如果有{e1 = 1,e2, e3 = 1,  e4} ,那么e2为2,e4也为2,可见枚举的值是根据前面的枚举的值递推得到,而且两个枚举的值可以重复
原文地址:https://www.cnblogs.com/cplover/p/3371923.html