enum是枚举类型,但说它是一种类型,它和内置类型及类类型都有些许不同。它的用法真的很奇怪,我们一起来看一看:
enum week{monday,tuesday,wednesday,thursday,friday,saturday,sunday};
week date=monday;
1
2
乍一看,enum和类的用法差不多啊,这样想你就错了,它会让你大开眼界:
enum {monday…sunday};
int date=monday;
1
2
就问你强不强,你类类型能这么用?类对象不带名字,然后里面的成员作用域符号都不用带就能直接用,这个时候,又感觉enum和内置类型差不多了。week这个“中间商”根本就是可有可无,你开心的话,还可以这么用:
enum {monady…sunday} week;
1
或者是这么用
enum{monday…sunday}yesterday=monday,today=tuesday,tommorrow=wednesday;
1
总的来说,我们用enum时用的都是enum里的成员,它有没有“实例化”对象可以跟我们没有半毛钱关系,下面是我从别人那里“拿”来的总结:
(1) 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号,隔开。
(2) week是一个标识符,可以看成这个集合的名字,是一个可选项,即是可有可无的项。
(3) 第一个枚举成员的默认值为整型的0,后续枚举成员的值在前一个成员上加1。
(4) 可以人为设定枚举成员的值,从而自定义某个范围内的整数。
(5) 枚举型是预处理指令#define的替代。
(6) 类型定义以分号;结束。
对了,忘了介绍一下C++11的新标准,enum也可以像class一样带有作用域:
enum class {monday…sunday};//错误
enum class week{monday…sunday};//正确
int today=monday;//错误
int today=week::monday;//正确
1
2
3
4
我们可以发现,加上class修饰符后,enum这个“坏孩子”就开始从良了,不能再任性地不带对象名,也不能顽皮地不用::修饰符了,它更像是一个类。但是坏孩子的天性是抹杀不掉的,它还是保留了enum的特点,即(3) 第一个枚举成员的默认值为整型的0,后续枚举成员的值在前一个成员上加1。
也不知道是自己还是啥,现在还停留在贪心算法,学长最近的题也快看不懂了