版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第4章 Delphi XE8 過程與函數(shù)Delphi 程序設(shè)計教程(第3版)清華大學(xué)出版社 楊長春 主編 運行結(jié)束后沒有返回值的子程序稱為過程。在Delphi XE8中有三種類型的過程:即標準過程、事件過程和自定義過程。 其中標準過程和自定義過程又可以稱為通用過程。即這兩種過程可以獨立于事件,被任何過程或函數(shù)調(diào)用。4.1.1 標準過程 標準過程是系統(tǒng)內(nèi)部已經(jīng)定義好的過程,不需要編寫代碼,也不能改變過程的名稱和參數(shù)。標準過程的調(diào)用非常簡單,在需要調(diào)用的位置直接書寫該過程即可 。一個比較大的程序可以被劃分成若干個模塊,每個模塊完成一個或幾個功能,每個功能可以用一個程序段來實現(xiàn),這個程序段被稱為“子
2、程序”。在Delphi XE8中,過程(Procedure)指沒有返回值的“子程序”,而函數(shù)(Function)是有返回值的“子程序”。 4.1 過程4.1.2 事件過程 當(dāng)對象接受到某個動作時,Windows會通知Delphi產(chǎn)生一個事件(鼠標單擊事件),而Delphi會自動執(zhí)行該對象與該事件有關(guān)的一段程序,這就是該對象的一個事件過程。 1事件過程的創(chuàng)建 在窗體上(或在對象監(jiān)視器中)選中該對象,然后在對象監(jiān)視器的事件(Event)選項卡中選擇相應(yīng)的事件名,用鼠標雙擊其右側(cè)的下拉列表框,Delphi將自動產(chǎn)生一個默認的事件過程框架,執(zhí)行該事件的代碼需要添加在框架內(nèi)。Delphi產(chǎn)生的默認事件過
3、程的名稱遵循下面的命名原則:控件名稱加上事件類型名(無On) 。2事件過程調(diào)用 已經(jīng)創(chuàng)建完成的事件過程可以被其他事件過程調(diào)用 。4.1.3 自定義過程一般自定義過程定義在單元的implementation部分的中$R *.dfm后面。1自定義過程聲明自定義過程的一般聲明格式如下: procedure ( ) ; 局部聲明 begin end;過程的聲明必須以procedure開始,包括過程名,形參表,局部聲明部分和以begin開始end結(jié)束的過程語句序列。 第一行必須以“;”分號結(jié)束,是過程首部。其余部分為過程的實現(xiàn)部分,必須包括一個begin-end結(jié)構(gòu)。End后面也必須以“;”分號結(jié)束,表
4、示過程結(jié)束。 過程參數(shù)的一般書寫形式為: ( Var |Const :)Var和Const為系統(tǒng)的保留字,Var表示參數(shù)傳遞方式為地址傳遞,即形參值的改變將反映到實參中。Const表示在過程內(nèi)部不能改變形參的值。不帶這兩個參數(shù)的形參傳遞方式為值傳遞,即過程內(nèi)部對形參值的改變將不會反映到實參中。過程的定義可以有類似下面的兩種形式:procedure GetSum(V1,V2:Integer;var Sum:Int64);procedure ProcNoPara;2自定義過程的創(chuàng)建和使用 一般可以創(chuàng)建兩種自定義過程。一種是僅能本單元中使用,對其他的單元文件該過程不可見;另外一種就是還可以在其他單元
5、中使用的公共過程。要創(chuàng)建能在其他單元中使用的過程,必須將過程首部聲明在單元的公共接口部分(Interface)中。如果是僅在本單元內(nèi)部使用的自定義過程,則必須先創(chuàng)建才能被使用 。 函數(shù)是有返回值的子程序,一般通過函數(shù)名或一個系統(tǒng)預(yù)定義的隱含變量Result返回函數(shù)的值。在Delphi XE8中有兩種函數(shù),內(nèi)部函數(shù)和自定義函數(shù)。 4.2.1標準函數(shù)標準函數(shù)是系統(tǒng)內(nèi)部已經(jīng)定義好的函數(shù)。不能改變標準函數(shù)的參數(shù)以及返回值類型。 其定義形式如下:function StrToInt(const S: string): Integer; 表明該函數(shù)接受一個常量參數(shù),并返回一個整型值。4.2 函數(shù)4.2.2
6、自定義函數(shù)1函數(shù)的定義一般的語法格式為: Function ():返回類型; 局部聲明 Begin End ;自定義函數(shù)含有一個以Function開始的函數(shù)首部,包括函數(shù)名,函數(shù)的形參表和函數(shù)的返回值類型以及返回值類型前面的“:” 冒號和后面的“;”分號。一個函數(shù)可以沒有形參表,但必須有函數(shù)返回值類型, 同樣也可以沒有局部聲明,但必須有一個實現(xiàn)函數(shù)功能的函數(shù)體,以Begin開始,End結(jié)束。在End后也必須有一個“;”分號表示函數(shù)體的結(jié)束。 2自定義函數(shù)的創(chuàng)建和使用對于僅在本過程內(nèi)部使用的函數(shù),必須遵循先創(chuàng)建在使用的原則。如果想讓一個函數(shù)對其他的單元也是可見的,則必須將函數(shù)首部定義在單元的接口
7、部分。則函數(shù)功能的實現(xiàn)和調(diào)用之間的位置就不必遵循先創(chuàng)建再使用的規(guī)則。同樣也需要使用一個與函數(shù)的返回值類型相同的變量來接受函數(shù)的返回值。 內(nèi)部函數(shù)和過程是指定義在一個過程和函數(shù)內(nèi)部,只能由該過程和函數(shù)使用的函數(shù)和過程,內(nèi)部程序又稱為程序嵌套。1嵌套層次 為了準確地表達嵌套層次,通常將嵌套從外向內(nèi)進行編號,并把相應(yīng)子程序的層號稱為子程序的嵌套深度。 一般單元文件為0層,其中的子程序從外向內(nèi)依次為1層、2層、3層、。 Unit 0層A1 1層A2 2層A3 3層圖4-3 嵌套層次關(guān)系圖有嵌套關(guān)系的子程序,若層號相差為1,稱為相鄰層,并稱層號小的為外層子程序,層號大的為內(nèi)層子程序;若層號相差大于1,則
8、稱為隔層。 子程序的嵌套要求外層子程序能夠完全包含內(nèi)層子程序,不允許局部包含,即不允許交叉。4.3 內(nèi)部過程與函數(shù)2子程序的調(diào)用規(guī)則Delphi XE8中,子程序調(diào)用必須遵循如下規(guī)則: (1)子程序可以調(diào)用其相鄰內(nèi)層的子程序,不能隔層調(diào)用。如圖4-4所示,A1可以調(diào)用A1B和A1但不能調(diào)用A3。(2)內(nèi)層子程序可以調(diào)用外層的子程序而且允許隔層調(diào)用。如A2B可以調(diào)用A2,A3調(diào)用A1Unit 0層A1 1層A1B 2層A3 3層圖4-4 子程序的調(diào)用規(guī)則A1C 2層A2 1層A2B 2層A2C 2層(3)同一層的子程序,允許后定義的子程序調(diào)用先定義的子程序,如A2C可以調(diào)用A2B但是A2B不可以
9、調(diào)用A2C。(4)如果需要調(diào)用同層中后定義的子程序,必須用保留字forward(超前引用)對后面的子程序提前說明。補充:Swap(int p1,int p2) int temp; temp=p1; p1=p2; p2=temp;main() int a,b; a=3;b=5; If ab swap(a,b); Printf(“%d,%d”,a,b); 問執(zhí)行結(jié)果a和b的值?補充:Swap(int *p1,int *p2) int temp; temp=*p1; *p1=*p2; *p2=temp;main() int a,b; a=3;b=5; If ab swap(&a,&b
10、); Printf(“%d,%d”,a,b); 問執(zhí)行結(jié)果a和b的值?4.4.1 形式參數(shù)與實際參數(shù)形式參數(shù)是指出現(xiàn)在過程或者函數(shù)首部“形參表”中的變量名,表示用于接收數(shù)據(jù)的變量。實際參數(shù)是指在調(diào)用過程或是函數(shù)時,傳遞給過程或函數(shù)的常量、變量或表達式。 在過程或是函數(shù)的定義中,使用形式參數(shù)來確定該過程或函數(shù)所需要的參數(shù)的個數(shù)、類型以及參數(shù)之間的次序。在調(diào)用該過程或是函數(shù)時,實際參數(shù)將替換形式參數(shù),形參和實參之間的對應(yīng)關(guān)系為:第一個形參接受第一個實參的值,第二個形參接受第二個實參的值,依次類推。 4.4 參數(shù)的傳遞4.4.2 參數(shù)的傳遞方式在Delphi XE8中,有兩種參數(shù)的傳遞方式,“按值傳
11、遞”和“按地址傳遞”。在過程或者函數(shù)的首部“形參表”中的參數(shù)前面使用系統(tǒng)的保留字Var或者Out的形參變量表示為“按地址傳遞”,使用Const或沒有任何保留字的形式參數(shù),將使用“按值傳遞”的方式。聲明為“按值傳遞”的參數(shù)僅負責(zé)得到實際參數(shù)的值,不保留內(nèi)部對該參數(shù)的改變,而聲明為“按地址傳遞”的參數(shù)將保留函數(shù)或過程內(nèi)部對實際參數(shù)值的改變,并在調(diào)用結(jié)束后返回該值。 “按地址傳遞”的參數(shù)實參和形參的類型必須一致,而“按值傳遞”的實參和形參之間僅需要賦值相容即可。4.4.3 使用缺省參數(shù)在聲明函數(shù)或過程中,可以給形參指定一個缺省的值,在調(diào)用時,如果沒有給形參指定實參,則系統(tǒng)自動使用缺省的值,如果賦值,
12、則使用實際參數(shù)的值。缺省參數(shù)聲明的方法是在形參的類型后面使用“=”等號,并給出具體的常量值。但是需要注意的是,如果后面的參數(shù)沒有使用缺省參數(shù),不允許僅對前面的參數(shù)使用缺省參數(shù)。 4.4.4 賦值兼容與調(diào)用約定賦值兼容是指變量可以進行賦值或進行參數(shù)傳遞。當(dāng)兩個類型要進行賦值操作而又不滿足賦值兼容時,將產(chǎn)生編譯錯誤。Object Pascal 提供了五種過程和函數(shù)的調(diào)用方式,分別為Register,Pascal,Cdecl,Stdcall,SafeCall。缺省的調(diào)用方式是Register方式。 Register和Pascal調(diào)用方式傳遞參數(shù)是從左到右,而Cdecl, Stdcall和 Safec
13、all 調(diào)用方式傳遞參數(shù)則是從右到左。 Register調(diào)用方式自動清除調(diào)用所使用的堆棧和寄存器,負責(zé)處理調(diào)用錯誤,同時也是速度最快的調(diào)用方式。 變量的作用域是指變量可以被識別的范圍。4.5.1 公有變量和私有變量一般Delphi XE8的單元具有下面的結(jié)構(gòu) unit 單元名 /單元首部 interface /單元接口部分 implementation /單元實現(xiàn)部分 end. /單元結(jié)束 在單元的接口部分(Interface)聲明的變量屬于公有變量,不僅可以被本單元中的所有過程和函數(shù)使用,同時還可以被其他單元中的過程和函數(shù)使用。在單元的實現(xiàn)部分后聲明的變量屬于私有變量,不能被其他單元使用。
14、4.5 變量的作用域4.5.2 全局變量和局部變量局部變量是指在過程或函數(shù)的內(nèi)部聲明的變量;而定義在單元的實現(xiàn)部分的變量,對整個單元內(nèi)部的過程和函數(shù)都是有效的,是全局變量。公有變量也是全局變量。當(dāng)全局變量和局部變量的名稱相同時,在過程和函數(shù)的內(nèi)部,使用的是局部變量的值。4.5.3 變量的存儲方式從空間上來講,全局變量的作用范圍是整個程序,局部變量僅在本程序段內(nèi)部有效。 從變量的存儲時間上來看,全局變量是靜態(tài)存儲,局部變量是動態(tài)存儲。所謂的靜態(tài)存儲是變量在程序運行期間一直占有固定的存儲空間,直到整個程序結(jié)束變量所占用的空間才釋放。而動態(tài)存儲則是程序在運行期間根據(jù)需要動態(tài)的分配存儲空間,子程序一旦結(jié)束,變量所占有的存儲空間立即釋放。 一般內(nèi)存中供程序使用的區(qū)域可以分為三個部分,程序區(qū),靜態(tài)存儲區(qū)和動態(tài)存儲區(qū)。在動態(tài)存儲區(qū)中存放的數(shù)據(jù)有:函數(shù)或過程的形式參數(shù),函數(shù)和過程內(nèi)部
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年浙江大學(xué)軟件學(xué)院招聘備考題庫及1套完整答案詳解
- 上海市第五人民醫(yī)院2026年度招聘備考題庫及完整答案詳解一套
- 中央團校(中國青年政治學(xué)院)2026年度高校畢業(yè)生公開招聘9人備考題庫及答案詳解參考
- 2026年長三角一體化示范區(qū)(江蘇)中電院數(shù)字健康檢驗認證有限公司招聘備考題庫完整答案詳解
- 2026年松滋市第二人民醫(yī)院招聘備考題庫有答案詳解
- 廣播電視安全生產(chǎn)制度
- 生產(chǎn)跟進制度
- 玻纖廠生產(chǎn)制度及流程
- 拆除安全生產(chǎn)制度
- 受托生產(chǎn)活動監(jiān)督制度
- 江蘇省淮安市2024-2025學(xué)年七年級下學(xué)期期末歷史試題(含答案)
- 醫(yī)療器械胰島素泵市場可行性分析報告
- 地鐵施工現(xiàn)場防臺風(fēng)措施
- 種植業(yè)合作社賬務(wù)處理
- 【麗江玉龍旅游薪酬制度的創(chuàng)新研究6100字】
- 公司兩權(quán)分離管理制度
- 車輛叉車日常檢查記錄表
- 廣東高校畢業(yè)生“三支一扶”計劃招募考試真題2024
- 膠帶機硫化工藝.課件
- 種雞免疫工作總結(jié)
- 河南省商丘市柘城縣2024-2025學(xué)年八年級上學(xué)期期末數(shù)學(xué)試題(含答案)
評論
0/150
提交評論