C++枚举类型
如果一个变量只有几种可能的值,可以定义为枚举(enumeration)类型。所谓“枚举”是指将变量的值一一列举出来,变量的值只能在列举出来的值的范围内。声明枚举类型用enum开头。例如:
enum weekday{sun, mon, tue, wed, thu, fri, sat};
上面声明了一个枚举类型weekday,花括号中sun, mon, …, sat等称为枚举元素或枚举常量。表示这个类型的变量的值只能是以上7个值之一。它们是用户自己定义的标识符。
声明枚举类型的一般形式为:
enum 枚举类型名{枚举常量表列};
在声明了枚举类型之后,可以用它来定义变量。如:
weekday workday,week_end;
这样,workday和week_end被定义为枚举类型weekday的变量。
在C语言中,枚举类型名包括关键字enum,以上的定义可以写为:
enum weekday workday,week_end;
在C++中允许不写enum,一般也不写enum,但保留了C的用法。根据以上对枚举类型weekday的声明,枚举变量的值只能是sun到sat之一。例如:
workday=mon; week_end=sun;
是正确的。也可以直接定义枚举变量,如:
enum{sun, mon, tue, wed, thu, fri, sat} workday,week_end;
这些标识符并不自动地代表什么含义。
对枚举类型的几点说明:
对枚举元素按常量处理,故称枚举常量。
枚举元素作为常量,它们是有值的,C++编译按定义时的顺序对它们赋值为0,1,2,3,…。也可以在声明枚举类型时另行指定枚举元素的值。
枚举值可以用来做判断比较。
一个整数不能直接赋给一个枚举变量。
【例】口袋中有红、黄、蓝、白、黑5种颜色的球若干个。每次从口袋中任意取出3个球,问得到3种不同颜色的球的可能取法,输出每种排列的情况。
#include <iostream> #include <iomanip>//在输出时要用到setw控制符 using namespace std; int main( ) { enum color {red,yellow,blue,white,black}; //声明枚举类型color color pri; //定义color类型的变量pri int i,j,k,n=0,loop; //n是累计不同颜色的组合数 for (i=red;i<=black;i++) //当i为某一颜色时 for (j=red;j<=black;j++) //当j为某一颜色时 if (i!=j) //若前两个球的颜色不同 { for (k=red;k<=black;k++) //只有前两个球的颜色不同,才需要检查第3个球的颜色 if ((k!=i) && (k!=j)) //3个球的颜色都不同 { n=n+1;//使累计值n加1 cout<<setw(3)<<n; //输出当前的n值,字段宽度为3 for (loop=1;loop<=3;loop++) //先后对3个球作处理 { switch (loop) //loop的值先后为1,2,3 { case 1: pri=color(i);break ; //color(i)是强制类型转换,使pri的值为i case 2: pri=color(j);break ; //使pri的值为j case 3: pri=color(k);break ; //使pri的值为k default :break ; } switch (pri)//判断pri的值,输出相应的“颜色” { case red: cout<<setw(8)<<"red"; break; case yellow: cout<<setw(8)<<"yellow";break; case blue:cout<<setw(8)<<"blue"; break ; case white:cout<<setw(8)<<"white"; break ; case black:cout<<setw(8)<<"black"; break ; default : break ; } } cout<<endl; } } cout<<"total:"<<n<<endl; //输出符合条件的组合的个数 return 0; }
运行结果如下:
1 red yellow blue 2 red yellow white 3 red yellow black ┆ ┆ ┆ 58 black white red 59 black white yellow 60 black white blue total:60
不用枚举常量,而用常数0代表“红”,1代表“黄”……也可以。但显然用枚举变量更直观,因为枚举元素都选用了令人“见名知意”的标识符,而且枚举变量的值限制在定义时规 定的几个枚举元素范围如果赋予它一个其他的值,就会出现出错信息,便于检查。
C++ typedef 声明新类型
在C++中,除了可以声明结构体、共用体、枚举等类型外,还可以用typedef声明一个新的类型名来代替已有的类型如:
这样,以下两行等价:
这样可以使熟悉FORTRAN的人能用INTEGER和REAL定义变量,以适应他们的习惯。
如果在一个程序中,整型变量是专门用来计数的,可以用COUNT来作为整型类型名:
typedef int COUNT; //指定用COUNT代表int型 COUNT i,j; //将变量i,j定义为COUNT类型
即int类型在程序中将变量i, j定义为COUNT类型,可以使人更一目了然地知道它们是用于计数的。
也可以声明结构体类型:
typedef struct //注意在struct之前用了关键字typedef,表示是声明新名 { int month; int day; int year; }DATE; //注意DATE是新类型名,而不是结构体变量名
所声明的新类型名DATE代表上面指定的一个结构体类型。这样就可以用DATE定义变量:
DATE birthday; DATE *p; //p为指向此结构体类型数据的指针
还可以进一步:
typedef int NUM[100]; //声明NUM为整型数组类型,包含100个元素 NUM n; //定义n为包含100个整型元素的数组 typedef char *STRING; //声明STRING为字符指针类型 STRING p,s[10]; //p为字符指针变量,s为指针数组(有10个元素) typedef int (*POINTER)( ) //声明POINTER为指向函数的指针类型,函数返回整型值 POINTER p1, p2; // p1,p2为POINTER类型的指针变量
归纳起来,声明一个新的类型名的方法是:
再以声明上述的数组类型为例来说明:
习惯上常把用typedef声明的类型名用大写字母表示,以便与系统提供的标准类型标识符相区别。
关于typedef的几点说明:
枚举类型(也可以称为“枚举器”)由一组具有独立标识符(名称)的整数类型常量构成,在 C# 中枚举类型不仅可以在类或结构体的内部声明,也可以在类或结构体的外部声明,默认情况下枚举类型中成员的默认值是从 0 开始的,然后逐一递增。 在 C# 中可以使用 enum 关键字来声明枚举类型,语法格式如下所示: enum enum_name{ enumeration list; } 其中,enum_n
本文向大家介绍C#中可枚举类型详解,包括了C#中可枚举类型详解的使用技巧和注意事项,需要的朋友参考一下 枚举是迭代一个集合中的数据项的过程。 我们经常使用的大多数集合实际上都已经实现了枚举的接口IEnumerable和IEnumerator接口,这样才能使用foreach迭代,有些是含有某种抽象了枚举细节的接口:ArrayList类型有索引,BitArray有Get方法,哈希表和字典有键和值...
问题内容: 有人可以解释一下这是什么意思吗? 这似乎是一个循环定义,至少可以说让我感到困惑。 问题答案: Java Generics FAQ中 有很好的解释。 从末尾开始: 概括起来,声明可以解密为:是仅可为其子类型实例化的泛型类型,并且这些子类型将继承一些有用的方法,其中一些方法具有子类型特定的参数(否则取决于子类型)。 (尽管我确实很同情-递归的泛型声明很痛苦。但是,我的协议缓冲端口到C#的情
在实际编程中,有些数据的取值往往是有限的,只能是非常少量的整数,并且最好为每个值都取一个名字,以方便在后续代码中使用,比如一个星期只有七天,一年只有十二个月,一个班每周有六门课程等。 以每周七天为例,我们可以使用 命令来给每天指定一个名字: 运行结果: 5↙ Friday 命令虽然能解决问题,但也带来了不小的副作用,导致宏名过多,代码松散,看起来总有点不舒服。C语言提供了一种 枚举(Enum)类型
本文向大家介绍C#枚举类型与结构类型实例解析,包括了C#枚举类型与结构类型实例解析的使用技巧和注意事项,需要的朋友参考一下 本文以C#实例讲解了枚举类型与结构类型的用法,程序主要是通过个人电话本演示枚举类型与结构类型的用法,具体代码如下所示:
本文向大家介绍Java的枚举类型使用方法详解,包括了Java的枚举类型使用方法详解的使用技巧和注意事项,需要的朋友参考一下 1.背景 在java语言中还没有引入枚举类型之前,表示枚举类型的常用模式是声明一组具有int常量。之前我们通常利用public final static 方法定义的代码如下,分别用1 表示春天,2表示夏天,3表示秋天,4表示冬天。 这种方法称作int枚举模式。可这种模式有什么