- 21天學通Visual Basic
- 馬軍等編著
- 3203字
- 2019-01-09 13:52:24
2.2 數據類型
數據類型是用抽象的方式來描述客觀事物的一種定義,這樣就可以通過計算機語言來描述客觀事物。舉個簡單的例子,在日常生活中有日期和貨幣這兩種實際的事物,如果想要在計算機中表示這兩種客觀的事物,必須采用相對應的數據類型進行描述。而在計算機數據類型中,專門有日期型數據和貨幣型數據分別來描述日期和貨幣,如圖2.2所示。

圖2.2 數據類型
不同的數據類型定義不同的數據存儲方式。為了能用計算機語言準確地描述客觀事物,用戶需要選擇準確的數據類型與之對應。Visual Basic 6.0提供了豐富的數據類型,同時支持自定義的數據類型。本節內容主要介紹Visual Basic 6.0的標準數據類型和自定義數據類型。
2.2.1 基本數據類型
基本數據類型是由Visual Basic 6.0提供給用戶的數據類型,無須重新定義就可以直接用來聲明變量或常量。基本數據類型具體有以下幾類。
1.數值型數據類型
· 整型(Integer):用于保存整數,范圍大小為-32768~32767,存儲空間為2字節。類型聲明符為%,用類型聲明符可以更方便地聲明數據類型。例如,-455、-455%都表示整型數據。
· 長整型(Long):用于保存整數,范圍大小為-2147 483648~2147 438647,存儲空間為4字節。類型聲明符為&。例如,455&。
· 單精度型(Single):用于保存浮點數,范圍大小為-3.402823E38~-1.4011298E-45;1.401298E-45~3.402823E38,存儲空間為4字節。類型聲明符為!。例如,1.455和1.455!。
· 雙精度型(Double):用于保存浮點數,范圍大小為±4.94D-324~±1.79D308,存儲空間為8字節。類型聲明符為#。例如,3.795#和3.795都表示雙精度浮點數。
· 貨幣型(Currency):用于貨幣計算,存儲空間為8字節。類型聲明符為@。例如,88.56@。
· 字節型(Byte):用于保存無符號二進制數據,范圍大小為0~255,存儲空間為1字節。
2.字符型數據類型
字符型數據類型用于存放字符串,字符包括所有ASCII字符和漢字字符。字符型數據類型用雙引號""括起來表示。類型聲明符為$。例如,"hello world!"、"123"、"Visual Basic 6.0基礎教程"等。默認初始值為空。字符型數據類型分為兩類。
· 變長字符型:表示字符串長度是可變的,用戶一般定義的字符串都屬于變長字符型。范圍大小為1~(約)20億個字符。
· 定長字符型:表示字符串長度固定不變,由用戶聲明字符串長度后,在計算機內存中分配的存儲空間固定不變。范圍大小為1~(約)65400個字符。例如:
Dim strAddr As String*40
這個語句表示了定義字符串變量strAddr的長度為40個字符,如果用戶給strAddr賦值字符個數多于40個,系統會自動截斷超出的字符。
【范例2-1】變長字符型和固定字符型的區別如示例代碼2-1所示。
示例代碼2-1
01 Option Explicit 02 '變長字符型與定長字符型的區別 03 Private Sub Form_Load() 04 Dim str1 As String * 5 '定義定長字符串 05 Dim str2 As String '定義變長字符串 06 07 str1 = "123456" '定長字符串賦值 08 str2 = "123456" '變長字符串賦值 09 10 Print Chr(13) '輸出空行 也可以直接使用Print 11 Print "定長字符型:" + str1 + Chr(13) '輸出結果 12 Print "變長字符型:" + str2 13 End Sub
【運行結果】按下“F5”鍵運行程序,顯示結果如圖2.3所示。

圖2.3 變長字符型和定長字符型的區別
【代碼解析】從顯示結果可以看出,對于定長字符“str1”,如果賦值超過其固定長度5,多余的字符會被截斷,在以上代碼中將超過長度的字符“6”截斷,輸出結果變為“12345”。而對于變長字符串str2,輸出結果仍然為“123456”。這就是定長字符和變長字符串的區別。
警告
定長字符串的使用必須注意其長度,對于一些比較重要的應用,很可能因為錯誤地指定了字符串長度而造成錯誤的運行結果。
3.邏輯型數據類型
邏輯型數據類型用于邏輯判斷,也就是平時所說的真和假。它只有真(True)和假(False)兩個取值。占據的存儲空間為1字節。在代碼編寫中常常用True和False表示。默認值為False。邏輯型數據類型也可以和數值型數據類型進行轉換。具體的轉換應遵循以下兩個規則。
· 邏輯型轉換為數值型數據類型時,False轉換為0,True轉換為-1。
· 數值型轉換為邏輯型數據類型時,0轉換為False,非0轉換為True。
這兩個轉換規則讀者應該給予一定的重視,因為在很多的函數返回值中常常是返回零或非零的整數值。按照上述規則,如果返回值為零,則表示函數執行失敗;如果返回非零值,則表示函數執行成功。
4.日期型數據類型
日期型數據類型用于存放日期和時間。賦值的時候日期型數據類型必須用兩個“#”符號括起來。例如,#2008-01-10#、#10/01/2008#、#2 Jan,2008#、#1/10/2008 3:12:22 PM#。
5.枚舉型數據類型
枚舉型數據類型是當一個變量有兩個或者兩個以上的值時,可以通過定義枚舉型數據類型來聲明。這個變量中每個成員的值稱為枚舉值,具體的語法如下。
[Public/Private] Enum<枚舉數據名稱> <成員1>[=<表達式>] <成員2>[=<表達式>] <成員3>[=<表達式>] ……… <成員n>[=<表達式>] End Enum
參數說明如下所示。
· Public:表示該枚舉類型在整個工程中可見,是枚舉類型默認值。
· Private:表示該枚舉類型只在聲明模塊中可見。
· 枚舉數據類型:表示該枚舉類型的名稱。
· 成員n:表示該枚舉類型的組成元素的名稱。
· 表達式:表示成員n的賦值。
枚舉類型是非常有用的數據類型,可以描述日常生活中的客觀事物。例如,“星期”這個概念就可以用枚舉類型來描述。用枚舉類型描述星期的概念,具體代碼如下所示。
01 Enum Week '定義枚舉類型Week 02 Monday=1 '星期一 03 Tuesday=2 '星期二 04 Wednesday=3 '星期三 05 Thursday=4 '星期四 06 Friday=5 '星期五 07 Saturday=6 '星期六 08 Sunday=7 '星期日 09 End Enum
這樣,在代碼編寫中就可以用Week這個枚舉類型數據來定義星期類型的變量了。
6.變體型數據類型
變體型數據類型也被稱為通用數據類型,這是為了方便數據的處理而增加的一種數據類型。在Microsoft公司開發的COM技術中,這是一種常用的數據類型。變體型數據類型中可以存儲任何數據類型,包括前面介紹的數值型、字符型和日期型等數據類型。變體型數據類型的存儲空間是根據實際需要進行分配的。
注意
變體型數據類型可以存儲任何數據類型,有些讀者可能會想:“在代碼編寫中將所有的變量都聲明成變體型數據類型不是方便了很多嗎?”。但是,看起來方便,其實不然,建議讀者在代碼編寫時應盡量少使用變體型數據類型。因為如果聲明數據變量為變體型數據類型,在變量存儲空間分配、變量類型轉換等環節都會有不小的系統開銷。與其這樣,不如在聲明變量時,明確變量的類型。
2.2.2 自定義數據類型
上述的基本數據類型只能描述很少的客觀事物,用戶在編寫代碼的時候會感到數據類型不夠用。有時會希望能夠將不同的數據類型組合成為一種新的類型來描述客觀事物。例如,如果想在計算機中描述一個“學生”對象,需要定義“學生”的學號、姓名及性別等信息。可以用自定義數據類型來定義“學生”對象,如圖2.4所示為用自定義數據類型來描述“學生”對象。

圖2.4 “學生”對象
因此,Visual Basic 6.0允許自定義數據類型。自定義數據類型是由基本數據類型組合構成的,用戶可以通過以下的語法來定義自定義數據類型。
[Public/Private] Type<類型名稱> <元素名稱1>[(<下標>)]As<基本數據類型> <元素名稱2>[(<下標>)]As<基本數據類型> …… <元素名稱n>[(<下標>)]As<基本數據類型> End Type
參數說明如下所示。
· 類型名稱:表示該自定義類型的名稱。
· 元素名稱n:表示該自定義類型的元素的名稱。
· 下標:表示數組元素的維數。
· 基本數據類型:可以是其他基本數據類型、用戶自定義的類型和對象類型。
提示
自定義數據類型的使用在程序開發中非常普遍,也是非常有用的。自定義類型的數據可以用“變量名.元素名”的形式來引用。
【范例2-2】在數據庫應用程序設計中,公司的職員是非常常見的一種客觀實體。在進行程序設計時,必須對職員進行定義,然后才能讓計算機進行處理。可是基本數據類型中并沒有現成的數據類型供用戶使用,那么就必須自己定義“職員”這種數據類型。
對于一個職員,最基本的屬性有姓名、年齡及住址。也許還有其他的屬性,在這里為了方便介紹,暫時采用這3種。首先在代碼窗口中定義“職員”類型數據,如示例代碼2-2所示。
示例代碼2-2
01 Option Explicit 02 '定義一個職員的數據類型 03 Private Type Employee 04 empName As String '職員姓名 05 empAge As Integer '職員年齡 06 empAddr As String '職員住址 07 End Type 08 09 Dim emp1 As Employee '聲明一個Employee類型的變量 10 Private Sub Form_Load() 11 emp1.empName = "劉備" 'emp1對象empName成員賦值 12 emp1.empAge = "35" 'emp1對象empAge成員賦值 13 emp1.empAddr = "蜀國" 'emp1對象empAddr成員賦值 14 15 Print '輸出結果 16 Print emp1.empName & " " & emp1.empAge & " " & emp1.empAddr 17 End Sub
【運行結果】按下“F5”鍵運行程序,結果如圖2.5所示。

圖2.5 自定義數據類型演示
【代碼解析】這段代碼演示了如何定義一個自定義的數據類型并對其進行相關的操作。代碼中根據實際的職員所具備的屬性定義了一個Employee數據類型,然后通過代碼的第11~13行為emp1變量賦值,最后通過代碼的第16行將結果輸出到窗體上。