C++ 枚举


枚举

如果一个变量需要几种可能存在的值,那么就可以被定义为枚举类型。枚举在C/C++中,是一个被命名的整型常数的集合

枚举类型的定义
  • 枚举类型定义的两种方式
  1. 下述为第一种方式,即在声明的时候同时定义
enum 枚举名 {标识符[=整型常数],标识符[=整型常数],...}

eg:

enum open_modes{input=1,output,append};

在open_modes枚举中,input、output、append称为枚举子,它们限定了open_modes所定义对象的取值范围。

下面定义一个open_file函数

bool open_file(string file_name,open_modes om);
例如:
open_file("abc.txt",1);//error,传递的为非枚举值
open_file("abc.txt",input);//ok,第二个参数应该是input、output、append中的一个
  1. 第二种方式,即先声明,后定义
enum box b;//先声明enum box类型的变量b
enum {pencil,pen}box,box2//定义enum box类型
枚举作为整数

对于枚举变量中的枚举元素,系统是按照常量来处理的,故叫枚举常量,它们是不能进行普通的算术赋值的。

pencil=1;//error
//但是可以在声明的时候赋值
enum box{pencil=1,pen=2};
  • 需要注意的是,如果不进行元素赋值操作,那么元素将会被系统自动从0开始递增赋值操作。如果只给第一个元素进行了赋值,那么第二个元素的值就是第一个元素的值再加1
enum box{pencil=3,pen};//此时pen=4
  • 初始化可以赋负数,以后的元素仍然是依次加1
enum box{pencil=-3,pen};//此时pen=4

再如:

enum day{S=7,M=0,T,W,T,F,S};//7,0,1,2,3,4,5,6
  • 同一枚举中枚举子的取值不需要唯一,这主要用于分类
enum some_big_cities{
    Guangzhou=1,
    Shenzhen=1,
    Hongkong=1,
    Shanghai=2,
    Beijing=3,
    Tianjing=3
};

  • 一个枚举类型的sizeof就是某个能够容纳其范围的整型的sizeof,而且不会大于sizeof(int),除非某个枚举子的值不能用int或者unsigned int来表示。在32位机器中,sizeof(int)=4
枚举的作用域

C++枚举类型继承于C语言,C++枚举也有缺点,最显著的缺点在于作用域,在枚举类型中定义的常量,属于定义枚举的作用域,而不属于这个枚举类型

int main(){
    enum box1{pencil,pen};//定义enum box1类型
    box1 b;//声明一个enum box1类型的变量b
    b=pencil;//ok
    b=box::pencil;//错误,vc6.0中提示,pencil不是一个box1
    //的成员,vc2010是一个警告错误,限定名中使用了枚举,"main::box1"
    enum box2{pencil,pen};//error,重定义,以前的定义时“枚举数”
    //由此可知,pencil和pen的作用域和box1的作用域是相同的
    return 0;
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值