c\c++复习基础要点16----枚举类型

时间:2022-01-24 09:07:20

枚举类型:

语法格式:

enum 枚举类型名 {变量值列表};

例如:

enum  Weekday{sun, mon, tue, wed, thu, fri, set};

声明了枚举类型后,就可以定义枚举类型的变量了。定义枚举变量的语法格式为:

enum 枚举类型名  标示符;

枚举类型名  标示符;

例如:

enum  Weekday aday;

也可以把声明枚举类型和定义枚举类型变量合为一步:

enum{变量列表} 标示符;

例如:

enum {sun, mon, tue, wed, thu, fri, set} aday;

变量aday的值只能是sun到sat之一

声明枚举类型时,变量值列表中的标示符是一些符号常量,每一个都对应一个确定的整数值。第一个符号常量的值为0,第二为1,以此类推。

也可以在声明枚举类型时自行制定符号常量的值,制定的值必须是整数。

例如:

enum Weekday{sun, mon , tue=5, wed, fri,sat};

其中,sun=0、mon=1、tue=5、wed=6、….sat=9.

不能把一个整数值直接赋值给一个枚举类型的变量:

aday=2;       //错误

但是可以通过强制类型转换将整数赋值给枚举类型的变量。

例如:

aday=(Weekday)2;

实例:

#include<iostream>

using namespace std;

void main()

{

enum Weekday{sun , mon , tue , wed , thu , fri , sat};

Weekday  day1 , day2;

int  in1,in2;

cout<< “请输入两个0到6之间的整数:”<<endl;

cin>>in1>>in2;

day1=(Weekday)in1;

day2=(Weekday)in2;

if(day1==day2)

{

cout<< “您输入的都是”;

switch(day1)

{

case sun: cout<< “星期日”<<endl; break;

case mon: cout<< “星期一”<<endl; break;

case tue: cout<< “星期二”<<endl; break;

case wed: cout<< “星期三”<<endl; break;

case thu: cout<< “星期四”<<endl; break;

case fri: cout<< “星期五”<<endl; break;

case sat: cout<< “星期六”<<endl; break;

}

}

else

{

cout<< “您输入的两天分别是:”;

switch(day1)

{

case sun: cout<< “星期日”<<endl; break;

case mon: cout<< “星期一”<<endl; break;

case tue: cout<< “星期二”<<endl; break;

case wed: cout<< “星期三”<<endl; break;

case thu: cout<< “星期四”<<endl; break;

case fri: cout<< “星期五”<<endl; break;

case sat: cout<< “星期六”<<endl; break;

}

switch(day2)

{

case sun: cout<< “星期日”<<endl; break;

case mon: cout<< “星期一”<<endl; break;

case tue: cout<< “星期二”<<endl; break;

case wed: cout<< “星期三”<<endl; break;

case thu: cout<< “星期四”<<endl; break;

case fri: cout<< “星期五”<<endl; break;

case sat: cout<< “星期六”<<endl; break;

}

}

}

一道面试题:

下面代码片段的输出是:

enum{

A ,B , C = 1 ,D,

};

std::cout<<B<< ‘ ’<<D<<std::endl;

A 1 1 B 1 2  C 2 1  D 2 2

答案:B

默认下”接下来的枚举子取值是前面一个枚举子的取值+1“。既然这两个枚举子没有显式赋值,那么就按照默认规则办事,所以B==1,D==2 从这个例子也可以看出,同一枚举中枚举子的取值不需要唯一。