枚舉型

枚舉型是四種基本數據類型之一。常量、字元型、布爾型可以用來表達數,字元,真假的描述。但我們還是覺得有點缺欠:它們不能方便地進行一些標識符的描述,如:紅,橙,黃,綠,青,藍,紫七種顏色,要在數據類型中要把它們直接表達出來,我們覺得有障礙。而在計算機內有沒有這種數據類型,能夠很方便地將它們表示出來?有,枚舉型能辦到。用四種基本數據類型不便表示的標識符,而且這些標識符的數量是有限的,我們可以用枚舉的方法來表達它,把要用的所有標識符全部枚舉出來。這種方法比較接近自然語言的表達。

類型定義

類型定義的語法格式:

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)兩個變數的類型相同

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)兩個變數的類型是成分相同的串類型。

賦值相容

賦值相容是對賦值操作的兩個對象的類型要求。設賦值語句“:=”左邊的變數類型為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內部的枚舉類。

相關詞條

熱門詞條

聯絡我們