c++ enum 给定类型_C++中enum枚举类型的用法

1、枚举enum的用途浅例

写程序时,我们常常需要为某个对象关联一组可选的属性.例如,学生的成绩分A,B,C,D等,天气分

sunny, cloudy, rainy等等。更常见的,打开一个文件可能有三种状态:input, output和append.

典型

做法是,对应定义3个常数,即:const int input = 1; const int output = 2; const

int append =

3; 然后,调用以下函数:bool open_file(string file_name, int open_mode);

比如,open_file("Phenix_and_the_Crane",

append);这种做法比较简单,但存在许多缺点,主要的一点就是

无法限制传递给open_file函数的第2个参数的取值范围,只要传递int类型的值都是合法的。当然,这样

的情况下的应对措施就是在open_file函数内部判断第二个参数的取值,只有在1,2,3范围内才处理。

使用枚举能在一定程度上减轻这种尴尬,它不但能实现类似于之前定义三个常量的功能,还能够将这三

个值组合起来成为独一无二的组。例如:enum open_modes {input = 1, output, append};

以上定义了

open_modes为枚举类型enumeration type。每一个命名了的枚举都是唯一的类型,是一个类型标示器

type specifier。例如,我们可以重新写一个open_file函数: bool open_file(string

file_name,

open_modes om); 在open_modes枚举中,input, output,

append称为枚举子enumerator, 它们限定了

open_modes定义的对象的取值范围。这个时候,调用open_file函数和之前的方法还是一模一样:

open_file("Phenix_and_the_Crane", append);

但是,如果传递给open_file的第二个参数不是open_modes枚举类型值的话那么编译器就会识别出错误;

就算该参数取值等价于input, output, append中的某个,

也一样会出错哦!例如:open_file("Phenix_and_the_Crane", 1);

2、注意事项

(1.枚举中每个成员(标识符)结束符是",",不是";",最后一个成员可省略","。(2.初始化时可以赋负数,以后的标识符仍依次加1。(3.枚举变量只能取枚举说明结构中的某个标识符常量。

例如:enum

string

{

x1=5,

x2,

x3,

x4,

};

enum strig

x=x3;

此时,枚举变量x实际上是7。

(4.在外部,我们可以对枚举变量进行赋值,不过,得要进行类型转换。

如果我们不进行类型轮换,即如下所示进行赋值:x

= 3;是不允许的,如果对X进行赋值,只能对3进行类型转换.即:x

= (string)3

那么这样就对了.如果给x赋的不是一个整形的数,而是一个字符型的,如:x

= (string)’a’;那么这时候x的值并不是字符’a’,而是’a’的ASCII码,我们知道,在枚举类型中,各常量的值只能是整形的,所以在对上例会自的将’a’转换成一个整数值.从内存的角度来看来话,其实C/C++中整形和字符型的变量是一样的,它们之间可以互相转换.

enum SomeCities

{

zhanjiang=1, //1

Maoming, //2

Yangjiang, //3

Jiangmen, //4

Zhongshan = 1000 //1000

};

void printEnum(SomeCities sc)

{

cout<

}

int main(void)

{

SomeCities oneCity = SomeCities(1001);

//将50通过显式转换,为oneCity赋值

printEnum(oneCity);

getchar();

return 0;

}

当SomeCities(1001)或者(SomeCities)1001;时也不会出错,输出1001,所以我们赋值时最好写成SomeCities

oneCity = zhanjiang; 这样可以避免错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值