1. 为什么会有枚举???(大概了解下)
答:任何新名词的产生都是为了解决某一个实际问题的。当然枚举的产生也同样如此,它是为了更方便的解决某一个问题(马上下面会说到),没有枚举也能解决问题,但是有了枚举能更方便、更清晰的解决问题。
举个例子:
我们玩一款角色扮演类游戏,都要先创建角色,如果角色有3种(狂战士、龙骑士、魔法师),我们该怎么定义这3种角色呢???
简单的方法信手拈来:(变量名采用中文名首字母大写)
const int KZS = 100;
const int LQS = 200;
const int MFS = 300;
以上就定义好了3种角色,程序可以这么写,但是存在问题,这3个变量,我不清楚本身是相关联的。感觉像是各自定义不相关的3个变量。不太好理解,一旦这种定义多了,对于大型程序,理解起来都比较费劲!!
由此,枚举就产生了。。。
因为这3种职业都属于角色这个属性,他们是相关联的,使用枚举来定义更加合适!!更加简洁!!更加清晰!!
定义如下:(看不懂没关系,下面会细讲,这边大概了解为什么使用枚举,以及他的定义大致长什么样就行了)
enum ACTOR
{
KZS = 100,
LQS = 200,
MFS = 300
};
使用枚举有如下好处: 这边定义把3个角色联系到一起了,不再像const 变量那样看起来毫无联系。
2. 枚举的定义
定义注意几点: ① 使用关键字 enum
② 枚举成员用 逗号(,)隔开,最后不需要逗号(,)
③ 成员在 大括号内 { }
④ 定义最后 大括号 } 后面加分号(;)
举例说明如下:
enum ACTOR
{
KZS = 100,
LQS = 200,
MFS = 300
};
定义 使用关键字 enum 开头 ,跟着 枚举名(一般全大写),接下来 一对大括号 { },大括号内各枚举成员形如
枚举成员名 = 常量表达式,
除了最后一行,每行都是以逗号(,)结尾,最后一行不需要逗号(,)
最后,别忘了,最后大括号 } 后面的分号(;)
至此,枚举的定义就完成了,很简单吧!!!
这边多说一句,定义中,不要画蛇添足,比如出现如下
int KZS = 100,
多了个int,这边不需要类型,本身就是枚举成员,一定要注意!!!
3. 枚举的初始化
枚举成员初始化必须是 常量表达式(编译器编译期间能计算出值的整型表达式),比如 整型字面常量值 属于 常量表达式
例子一,
enum ACTOR
{
KZS = 100,
LQS = 200,
MFS = 300
};
第一个枚举成员KZS 被初始化为 100,
第二个枚举成员LQS 被初始化为 200,
第三个枚举成员MFS 被初始化为 300;
例子二,
enum ACTOR
{
KZS,
LQS,
MFS
};
第一个枚举成员KZS 被默认初始化为 0,
第二个枚举成员LQS 被初始化为 1,(0+1)
第三个枚举成员MFS 被初始化为 2;(1+1)
枚举定义中,若未提供初始化式,第一个成员默认初始化为0,后面的成员依次在前1个成员基础值+1。
例子三,
enum ACTOR
{
KZS,
LQS = 10,
MFS
};
第一个枚举成员KZS 被默认初始化为 0,
第二个枚举成员LQS 被初始化为 10,
第三个枚举成员MFS 被初始化为 11;(10+1)
例子四,
enum ACTOR
{
KZS,
LQS,
MFS = 1
};
第一个枚举成员KZS 被默认初始化为 0,
第二个枚举成员LQS 被初始化为 1,(0+1)
第三个枚举成员MFS 被初始化为 1;
4. 枚举成员是 常量
① 枚举成员本身 就是 常量表达式
② 因为①,所以不能改变枚举成员的值
③ 任何能用到 常量表达式的地方,都可以使用 枚举成员。
5. 枚举注意点
① 每个enum 都定义了一个唯一的类型
② 同类型的枚举 可以 赋值,不同类型 不能相互 赋值
③ 枚举对象的初始化 和 赋值,只能用 其本身枚举成员 或者 同类型其他枚举对象。
举例说明:
enum ACTOR
{
KZS = 100,
LQS = 200,
MFS = 300
};
和
enum PROFESSION
{
TEACHER = 1,
POLICE = 2,
FARMER = 3
};
定义对象如下:
ACTOR actor = KZS; // 正确,使用枚举类型本身成员 初始化;
ACTOR actor_1 = 200; // 错误,不能使用 纯数字来初始化;错觉,即使300 和 MFS相关联,也不能这么做;
actor_1 = 300; // 错误,不能使用 纯数字来赋值;
actor_1 = actor ; // 正确,使用 同类型 枚举对象 来赋值;
PROFESSION person = actor; // 错误,不同类型枚举对象 不能初始化;
person = actor_1 ; // 错误,不同类型枚举对象 不能赋值;
本文暂时先介绍这些,枚举的其他用法(如 用在类中),后续再开博详说,各位,告辞!!如有不对之处,敬请指正!!转载请说明出处,谢谢!!!