请输入您要查询的百科知识:

 

词条 枚举型
释义

枚举型的定义四种基本数据类型,可以用来表达数,字符,真假的描述。但我们还是觉得有点缺欠:它们不能方便地行一些标识符的描述,如:红,橙,黄,绿,青,蓝,紫七种颜色,要在数据类型中要把它们直接表达出来,我们觉得有障碍。而在计算机内有没有这种数据类型,能够很方便地将它们表示出来?有,枚举型能办到。用四种基本数据类型不便表示的标识符,而且这些标识符的数量是有限的,我们可以用枚举的方法来表达它,把要用的所有标识符全部枚举出来。这种方法比较接近自然语言的表达。

一、类型定义

类型定义的语法格式:

type

<标识符1>=<类型1>;

<标识符2>=<类型2>;

……

<标识符n>=<类型n>;

二、枚举类型

通过预定义列出所有值的标识符来定义一个有序集合,这些值的次序和枚举类型说明中的标识符的次序识一致的。枚举类型的形式:(标识符1,……,标识符n)

例如: type daystype=(sunday,monday,tuesday,wednesday,thursday,friday,saturday)

枚举元素只能是标识符,而不能是数值常量或字符常量。例如以下的定义是错误的:

type daystype=('sun','mon','tue','wed','thu','fri','sat')

枚举元素是标识符,不要把作为枚举元素的标识符视作变量名,它不能被赋值。同一个枚举元素不能出现在两个或两个以上的枚举类型定义中。例如以下的定义是错误的:

type daytype1=(monday,tuesday);

daytype2=(monday,wednesday);

可以将枚举类型的定义和变量的定义结合在一起。例如:var a:(monday,tuesday,sunday)

枚举类型属于顺序类型。根据定义类型时各枚举元素的排列顺序确定它们的序列,序列号从0开始

例如:已经定义daystype

ord(sunday)=0,succ(sunday)=monday,pred(friday)=thursday

但是枚举类型中的第一个元素没有前趋,最后一个元素没有后继。Turbo Pascal不允许直接读写枚举值,所以枚举值的输出常用case语句间接的输出。枚举值的输入,则要一一判断读入字符是否是枚举类型的标识符。若是才能赋给枚举变量,否则就会出错。

例如:枚举值的输出

case day of

sunday:write('sunday');

monday:write('monday');

tuesday:write('tuesday');

wednesday:write('wednesday');

thursday:write('thursday');

friday:write('friday');

saturday:write('saturday');

end;

三、子界类型

子界类型是由整型、字符型、枚举型、布尔型的两个常量指定该类型的值域区间。子界类型的形式:

常量..常量 两个常量必须是同一种顺序类型。例如:a..b,要求a<=b

例如:

type a=1..3;

b='a'..'d';

一个子界类型继承它的常量类型的运算符和标准函数,常量类型相容的不同子界类型可以混合运算,可以赋值。可以将子界类型的定义和变量的定义结合在一起。例如:var a:1..9

例 按月、日、年顺序读入一日期,输出该日期是这一年中的第几天。

program date;

var year:0..2010;

month,i:1..12;

day:1..31;

dayth:integer;

begin

read(month,day,year);

dyath:=0;

for i:=1 to month-1 do

case i of

1,3,5,7,8,10,12:dayth:=dayth+31;

2:if ((year mod 4=0)and(year mod 100<>0)or(year mod 400 =0)

then dayth:=dayth+29

else dayth=:=dayth+28;

4,6,9,11:dayth:=dayth+30;

end;

dayth:=dayth+day;

writeln(dayth)

end.

四、类型相容和赋值相容

1.类型相容性

类型相容是对参加同一运算的两个对象的类型要求。设有两个变量,如果满足下列条件之一,就说这两个变量的类型相容。

(1)两个变量的类型相同

a.两个变量被同一类型说明。

例如:var a,b:1..30;

b.两个变量的类型是同一类型标识符。

例如:var a:1..30; b:1..30;

c.两个变量的类型是不同的类型标识符,但在类型定义中已经说明两个标识符相同。

例如:type date=1..100; range=date;

var m:data;n:range;

(2)一个变量的类型是另一个变量的子界。

(3)两个变量的类型都是同一基类型的子界。

(4)两个变量的类型是基类型相容的集合类型。

(5)两个变量的类型是成分相同的串类型。

2.赋值相容性

赋值相容是对赋值操作的两个对象的类型要求。设赋值语句“:=”左边的变量类型为T,右边表达式的类型为E,若类型T和类型E满足下列条件之一,则称他们是赋值相容的。

(1)T和E是相同的类型,而且类型不是文件类型,也不是具有文件类成分的构造类型。

(2)T是实型,而E是整型或整型的子界。

(3)T和E是类型相容的顺序类型,并且E的值不超出T所定义的值的范围

(4)T和E是类型相容的集合类型,并且E的值不超出T所定义的值的范围

(5)T和E是类型相容的串类型。

当T和E是顺序类型或都是集合类型时,不仅要求这两个类型是相容的,而且要求E的值不超出T所定义的值的范围;否则将产生类型溢出,而这种错误只能在你运行程序时进行检查,因此你必须要避免不发生这种错误。

在java中枚举类型一般定义格式如下:

enum 枚举类名 {

清单对象1, [清单对象2....];

}

java中的枚举类可以有构造函数、可以实现接口,但不能继承任何类,其在编译以后默认继承jdk内部的枚举类。

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2024/11/15 22:57:25