C++构造数据类型|枚举类型

1. 枚举类型

1.1 函数重载的定义

“枚举”是指将变量所有可能的取值一一列举出来,变量的取值只限于列举出来的常量。 1

1.2 枚举类型的声明

枚举类型的声明的一般形式如下 :
在这里插入图片描述
枚举类型名以及枚举常量为标识符,遵循标识符的取名规则。
在定义一个枚举类型时,定义了多个常量,供枚举类型变量取值,称此常量为枚举常量。当没给各枚举常量指定值时,其值依次默认为0、1、2、…;在定义枚举类型时,也可使用赋值另行指定枚举常量的值。

1.3 例1:

enum  weekday { SUN, MON, TUE, WED, THU, FRI, SAT }

定义了7个枚举常量以及枚举类型weekday。枚举常量具有默认的整数与之对应:SUN的值为0、MON的值为1、TUE为2、…、SAT为6。

1.4 例2:

 enum city{ Beijing,Shanghai,Tianjin=5,Chongqing}

枚举常量Beijing的值为0,Shanghai的值为1,Tianjin的值指定为5。对于指定值后面的没有指定值的枚举常量,编译器会将前一个常量值加1(下一个整数)赋给它,所以Chongqing的值为6。

2. 枚举类型的定义说明

  • 枚举类型定义了以后就可以使用枚举常量、使用用枚举类型来定义变量,定义枚举变量的方法与定义其它变量的方法一样。
    例如:
 enum  city  city1, city2;   
  city   city1, city2;

用两种不同方法定义了city1city2两个枚举类型的变量名。

  • 枚举类型变量也可以在定义枚举类型的同时定义,例如:
  enum city{Beijing,Shanghai,Tianjin=5,Chongqing} city1, city2;
  • 在定义枚举类型的同时定义枚举类型变量可以省略枚举类型名,例如:
   enum {Beijing,Shanghai,Tianjin=5,Chongqing} city1, city2;
  • 在定义变量时,可以顺便给出初值,若不给初值,默认初值为随机的无意义的数。

3. 枚举类型的使用

3.1 枚举变量的赋值

用枚举类型建立枚举变量后就可以对枚举变量实施赋值以及进行其它运算了,对枚举变量进行赋值,其值要求为同一枚举类型。否则,在编译时出错。
例如:

weekday d1,d2,d3,d4;
d1=SUN;
d2=6;            //错误
d3=Shanghai;     //错误

其中对d2所赋之值是整数6,不是枚举常量;可以采用将一个整型值强制转换成同类型的枚举常量赋给枚举变量。

3.2 枚举变量的运算

枚举常量、枚举类型的变量可进行算术运算、关系运算。
对枚举类型实施算术、关系运算时,枚举值转换成整型值参加运算,结果为整型值。所以,如果要将结果赋给枚举变量,还要将结果转换成枚举值。
例如:

d1=d1+2; //是错误的,因为结果为int型。
//需要将它强制转换成枚举型:
d1=(weekday)(d1+2);

枚举常量、枚举类型的变量可直接进行各种形式的关系运算。
例如:

if(city1==3)if(city2>=Beijing)if(Shanghai==1);
if(city1>SUN);

3.3 枚举变量的输入

枚举类型变量不能直接进行输入
例如:

cin>>d1;   //错误

3.4 注意事项

  • 枚举常量是常量,不是变量,所以不能对枚举常量进行赋值。
    例如: 在上例中不能进行赋值 Shanghai=Beijing
  • 枚举常量的值不是列举的字符串,其值为整数。
  • 编译器对赋给枚举变量的对象(数)进行类型检查,如类型不相符则发出警告。 当类型相同,而值超出此类枚举类型枚举常量范围时,也是正常的。

4 示例代码

/**********************************************************
*  功   能:枚举类型的使用,输入城市代号,输出城市名称      *
**********************************************************/
	#include<iostream>
	using namespace std;
	enum city{ Beijing,Shanghai,Tianjin=6,Chongqing};
	int main()
	{
	  int n;
	  cout<<"Input a city number ("<<Beijing-1<<" to exit):"<<endl;
	  cin>>n;
	  while(n>=Beijing){
	      switch(n) {
	        case Beijing: cout<<"Beijing"<<endl;break;
	        case Shanghai:cout<<"Shanghai"<<endl;break;
	        case Tianjin:cout<<"Tianjin"<<endl;break;
	        case Chongqing:cout<<"Chongqing"<<endl;break;
	        default:cout<<"Invalid city number!"<<endl;break;
	      }
	      cin>>n;
	   }
    return 0;
	}

  1. 本教程仅供教学使用,参考教材 :《C++语言程序设计教程》,杨进才、沈显君编著,清华大学出版社,2022年1月第4版 ↩︎

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皖山文武

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值