?? 008.htm
字號:
<HTML><HEAD><meta http-equiv="Content-Type" content="text/html; charset=GB2312"><TITLE>-->DELPHI基礎教程-->第二章 Delphi面向對象的編程方法(三)</TITLE>
<META NAME="keywords" CONTENT=" DELPHI基礎教程 第二章 Delphi面向對象的編程方法(三)">
<META NAME="description" CONTENT=" - DELPHI基礎教程 - 第二章 Delphi面向對象的編程方法(三)">
<style>
<!--
#page {position:absolute; z-index:0; left:0px; top:0px}
.tt3 {font: 9pt/12pt "宋體"}
.tt2 {font: 12pt/15pt "宋體"}
a {text-decoration:none}
a:hover {color: blue;text-decoration:underline}
-->
</style>
</HEAD>
<body text="#000000" aLink=#9900ff link=#006699 vLink=#006699 bgcolor="#FFFFFF" leftmargin="3" topmargin="3" marginheight="3" marginwidth="3">
<TABLE WIDTH="100%" CELLPADDING=10 CELLSPACING=0 BORDER=0>
<TR>
<TD CLASS="tt3" VALIGN="top" width="8%" bgcolor="#e0e0e0"><strong><A HREF="009.htm"><FONT style="FONT-SIZE: 9pt">后一頁</font></A><BR>
<A HREF="007.htm"><FONT style="FONT-SIZE: 9pt">前一頁</font></A><BR>
<A HREF="index.html"><FONT style="FONT-SIZE: 9pt">回目錄</font></A><BR>
<A HREF="../../../../index.htm"><FONT style="FONT-SIZE: 9pt">回首頁</font></A><BR>
</strong>
</TD>
<TD class="tt2" bgcolor="#F5F8F8" width="84%"><center><B><FONT style="FONT-SIZE: 16.5pt" COLOR="#FF6666" FACE="楷體_GB2312">第二章 Delphi面向對象的編程方法(三)</FONT></B></center>
<hr color="#EE9B73" size="1" width="94%">
<p>2.1.8.4 <font face="宋體" lang="ZH-CN">過程和函數的語句部分 </p>
</font><p><font face="宋體" lang="ZH-CN">
過程或函數的語句部分由</font>begin<font
face="宋體" lang="ZH-CN">開始,</font>end<font face="宋體" lang="ZH-CN">結束。函數需要一個返回值。可以將返回值賦給函數名稱,也可以將返回值賦給</font>Result<font
face="宋體" lang="ZH-CN">變量。下面的例程將返回值賦給函數名稱: </p>
</font><p>function CalculateInterest(Principal,InterestRate: Double):Double;</p>
<p>begin</p>
<p>CalculateInterest := Principal * InterestRate;</p>
<p>end; </p>
<p><font face="宋體" lang="ZH-CN">
將返回值賦給</font>Result<font
face="宋體" lang="ZH-CN">變量也是可以的,則上面的程序改為: </p>
</font><p>Result := Principal*InterestRate; </p>
<p><font face="宋體" lang="ZH-CN">下面是這個函數的調用方法:</font></p>
<p>InterestEarned :=CalculateInterest(2000,0.012);</p>
<p><font face="宋體" lang="ZH-CN"> 在</font>Implementation<font
face="宋體" lang="ZH-CN">后面的過程和函數,可以且只能被此庫單元的事件處理過程使用。要讓過程和函數可以被其他的程序庫單元使用,則需要將過程或函數的標題部分放在庫單元中的</font>interface<font
face="宋體" lang="ZH-CN">部分,而把含標題的整個過程或函數放在庫單元的</font>inplementation<font
face="宋體" lang="ZH-CN">部分,并在要訪問這個過程或函數的庫單元的</font>uses<font
face="宋體" lang="ZH-CN">子句中加入說明這個過程或函數的庫單元名稱。 </p>
</font><p>2.1.8.5 <font face="宋體" lang="ZH-CN">函數的遞歸調用 </p>
</font><p><font face="宋體" lang="ZH-CN"> 在</font>Object
Pascal<font face="宋體" lang="ZH-CN">中,過程或函數必須先說明再調用。上文的</font>NoValue<font
face="宋體" lang="ZH-CN">函數必須在使用它的事件處理過程之前說明和執行,否則程序會報告一個未知標識符的錯誤。</font></p>
<p><font face="宋體" lang="ZH-CN">
以上規則在遞歸調用時是例外情況。所謂遞歸調用,是指函數</font>A<font
face="宋體" lang="ZH-CN">調用函數</font>B<font face="宋體" lang="ZH-CN">,而函數</font>B<font
face="宋體" lang="ZH-CN">又調用函數</font>A<font face="宋體" lang="ZH-CN">的情況。在遞歸調用中,函數要進行前置,即在函數或過程的標題部分最后加上保留字</font>forword<font
face="宋體" lang="ZH-CN">。下文的例程是一個遞歸調用的典型例子: </p>
</font><p><font face="宋體" lang="ZH-CN">…</font></p>
<p>implementation</p>
<p>var</p>
<p>alpha:Integer; </p>
<p>procedure Test2(var A:Integer):forword;</p>
<p>{Test2<font face="宋體" lang="ZH-CN">被說明為前置過程}</font></p>
<p>procedure Test1(var A:Integer);</p>
<p>begin</p>
<p>A :=A-1;</p>
<p>if A>0 then</p>
<p>test2(A); {<font face="宋體" lang="ZH-CN">經前置說明,調用未執行的過程</font>Test2}</p>
<p>writeln(A);</p>
<p>end; </p>
<p>procedure Test2(var A:Integer);{<font face="宋體" lang="ZH-CN">經前置說明的</font>Test2<font
face="宋體" lang="ZH-CN">的執行部分}</font></p>
<p>begin</p>
<p>A :=A div 2;</p>
<p>if A>0 rhen</p>
<p>test1(A); {<font face="宋體" lang="ZH-CN">在</font>Test2<font face="宋體"
lang="ZH-CN">中調用已執行的過程</font>Test1} </p>
<p>end; </p>
<p>procedure TForm1.Button1Click(Sender:TObject);</p>
<p>begin</p>
<p>Alpha := 15; {<font face="宋體" lang="ZH-CN">給</font>Alpha<font face="宋體"
lang="ZH-CN">賦初值}</font></p>
<p>Test1(Alpha); { <font face="宋體" lang="ZH-CN">第一次調用</font>Test1,<font
face="宋體" lang="ZH-CN">遞歸開始}</font></p>
<p>end; </p>
<p><font face="宋體" lang="ZH-CN">
按鈕的</font>OnClick<font
face="宋體" lang="ZH-CN">事件處理過程給</font>Alpha<font face="宋體"
lang="ZH-CN">賦初值,并實現先減</font>1<font face="宋體" lang="ZH-CN">再除</font>2<font
face="宋體" lang="ZH-CN">的循環遞歸調用,直到</font>Alpha<font face="宋體"
lang="ZH-CN">小于</font>0<font face="宋體" lang="ZH-CN">為止。 </p>
</font><p>2.1.8.6 <font face="宋體" lang="ZH-CN">過程和函數的參數 </p>
</font><p><font face="宋體" lang="ZH-CN">
當您的程序代碼在調用一個過程或函數時,通常用參數傳遞數據到被調用的過程或函數中。最常用的參數有數值參數、變量參數和常量參數三種。</font></p>
<p><font face="宋體" lang="ZH-CN">
由被調用過程或函數定義的參數為形參,而由調用過程或函數指明的參數叫實參。在</font>NoValue<font
face="宋體" lang="ZH-CN">函數中,說明函數體中的</font>AnEditBox<font
face="宋體" lang="ZH-CN">是形參,而調用時在</font>if NoValue(Edit1)<font
face="宋體" lang="ZH-CN">…中,</font>Edit1<font face="宋體" lang="ZH-CN">是實參。</font></p>
<p><font face="宋體" lang="ZH-CN">
數值參數在運行過程中只改變其形參的值,不改變其實參的值,即參數的值不能傳遞到過程的外面。試看下面的例程: </p>
</font><p>procedure Calculate(CalNo:Integer);</p>
<p>begin</p>
<p>CalNo := CalNo*10;</p>
<p>end; </p>
<p><font face="宋體" lang="ZH-CN">
用以下例程調用</font>Calculate<font
face="宋體" lang="ZH-CN">函數:</font></p>
<p><font face="宋體" lang="ZH-CN">…</font></p>
<p>Number := StrToInt(Edit1.Text);</p>
<p>Calculate(Number);</p>
<p>Edit2.Text := IntToStr(Number); </p>
<p><font face="宋體" lang="ZH-CN">… </p>
</font><p> Number<font
face="宋體" lang="ZH-CN">接受由編輯框</font>1<font face="宋體" lang="ZH-CN">輸入的數值,經</font>Calculate<font
face="宋體" lang="ZH-CN">過程運算。它是一個數值型實參。在進入</font>Calculate<font
face="宋體" lang="ZH-CN">函數后,會把</font>Number<font face="宋體" lang="ZH-CN">實參拷貝給形參</font>CalNo<font
face="宋體" lang="ZH-CN">,在過程中</font>CalNo<font face="宋體" lang="ZH-CN">增大十倍,但并未傳遞出來,因此</font>Number<font
face="宋體" lang="ZH-CN">值并未改變,在編輯框</font>2<font face="宋體"
lang="ZH-CN">中顯示仍然是編輯框</font>1<font face="宋體" lang="ZH-CN">中的輸入值。形參和實參占用不同的內存地址,在過程或函數被調用時,將實參的值復制到形參占用的內存中。因此出了過程或函數后,形參和實參的數值是不同的,但實參的值并不發生變化。</font></p>
<p><font face="宋體" lang="ZH-CN">如果您想改變傳入的參數值,就需要使用變量參數,即在被調用程序的參數表中的形參前加上保留字</font>var<font
face="宋體" lang="ZH-CN">。例如: </p>
</font><p>procedure Calculate(var CalNo : Integer); </p>
<p><font face="宋體" lang="ZH-CN">
則</font>CalNo<font face="宋體"
lang="ZH-CN">并不在內存中占據一個位置,而是指向實參</font>Number<font
face="宋體" lang="ZH-CN">。當一個變參被傳遞時,任何對形參所作的改變會反映到實參中。這是因為兩個參數指向同一個地址。將上一個例程中過程頭的形參</font>CalNo<font
face="宋體" lang="ZH-CN">前面加上</font>var<font face="宋體" lang="ZH-CN">,再以同樣的程序調用它,則在第二個編輯框中會顯示計算的結果,把第一個編輯框中的數值放大十倍。這時形參</font>CalNo<font
face="宋體" lang="ZH-CN">和實參</font>Number<font face="宋體" lang="ZH-CN">的值都是</font>Nnmber<font
face="宋體" lang="ZH-CN">初始值的</font>10<font face="宋體" lang="ZH-CN">倍。</font></p>
<p><font face="宋體" lang="ZH-CN">
如果當過程或函數執行是要求不改變形參的值,最保險的辦法是使用常量參數。在參數表的參數名稱前加上保留字</font>const<font
face="宋體" lang="ZH-CN">可以使一個形參成為常量參數。使用常量參數代替數值參數可以保護您的參數,使您在不想改變參數值時不會意外地將新的值賦給這個參數。</p>
</font><p>2.1.9 <font face="宋體" lang="ZH-CN">定義新的數據類型 </p>
</font><p> Object Pascal<font
face="宋體" lang="ZH-CN">有一些系統預定義的數據類型,在</font>2.1.2<font
face="宋體" lang="ZH-CN">中已經對它們作了介紹。您可以利用這些數據類型以建立新的數據類型來滿足程序的特定需要。下面簡單地敘述了您能建立的主要數據類型,如枚舉型、子界型、數組型、集合型、記錄型、對象型等。 </p>
</font><p>2.1.9.1 <font face="宋體" lang="ZH-CN">枚舉類型 </p>
</font><p><font face="宋體" lang="ZH-CN">
一個枚舉型的說明列出了所有這種類型可以包括的值: </p>
</font><p>type</p>
<p>Tdays=( Sunday ,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday); </p>
<p><font face="宋體" lang="ZH-CN">
可以定義上述枚舉類型的變量:</font></p>
<p>var</p>
<p>DayOfWeek:TDays; </p>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -