C++构造数据类型|枚举类型
- 1. 枚举类型
- 1.1 函数重载的定义
- 1.2 枚举类型的声明
- 1.3 例1:
- 1.4 例2:
- 2. 枚举类型的定义说明
- 3. 枚举类型的使用
- 3.1 枚举变量的赋值
- 3.2 枚举变量的运算
- 3.3 枚举变量的输入
- 3.4 注意事项
- 4 示例代码
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;
用两种不同方法定义了city1
、city2
两个枚举类型的变量名。
- 枚举类型变量也可以在定义枚举类型的同时定义,例如:
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;
}
本教程仅供教学使用,参考教材 :《C++语言程序设计教程》,杨进才、沈显君编著,清华大学出版社,2022年1月第4版 ↩︎