我们在平常的编程中,时常需要为一些属性定义一组可以选择的值,比如文件打开的状态可能会有三种:输入 输出和追加
我们一般情况下记录这些状态是让每一个状态和一个常数相对应 比如
1 const int input=0; 2 const int output=1; 3 const int append=2;
这个方法虽然也是可以得,不过它有一个明显的缺点就是 没有指出这些值是相关联的
而C++中的 枚举 提供了一种替代的方法 不但可以定义常数集 还可以将其聚集成组 如下:
enum Cities //enum是关键字 Cities为枚举类型名() { zhanjiang, //0 Maoming, //0+1 Yangjiang, //1+1 Jiangmen, //2+1 };
在enum中,第一个枚举成员是0 后面每一个枚举成员的值等于前者加1
枚举的赋值
有时候,枚举的情况可能不能很好的符合枚举的默认情况 比如
我们可能希望枚举的值从n开始 不要成0开始
又可能 我们枚举的成员值 俩个不同的成员对应的常数需要是一样的 (比如 在Cities中 前面俩个城市在实际需要中要当成一个 我们就可以把它们对应的常数定义成相同的数)
enum Cities { zhanjiang=1, //1 Maoming, //2 Yangjiang, //3 Jiangmen, //4 beijin=3, //3 tianjin,//4 shanghai,//5 Zhongshan = 1000, //1000 changsha,//1001 };
这时候,我们就可以根据实际的情况对于enum 进行一定的改变 因为enum中的值有一个性质:
如果有初始值 那么这个成员的值就是 初始值
如果没有 那么它就等于前面成员值加1
有一点需要注意:不能改变枚举成员的值 枚举成员本身就是一个常量表达式
其次我们在定义enum时 都定义了一个新的类型 如我们代码 新类型为Cities
和其他类型一样 可以初始化和定义Cities类型的对象
但是只能通过其枚举成员或者同一枚举类型的对象来进行初始化与赋值
int k=15; double x=10.2; Cities oneCity = Cities(50); //将50通过显式转换,为oneCity赋值 Cities sanjian = shanghai;//通过相同类型来进行初始化 tianjin = 7; // 错误 enum定义的是常量 不能修改值 Zhongshan=k; //不同类型 不能修改常量的值 Zhongshan =x; //不同类型 不能修改常量的值