版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第五章第五章 過程與函數過程與函數 DelphiDelphi中,有許多預先定義好的子程序,它們統(tǒng)稱為中,有許多預先定義好的子程序,它們統(tǒng)稱為運行庫。運行庫。Object PascalObject Pascal也允許程序員自己定義子程也允許程序員自己定義子程序。子程序的引入,降低了程序的復雜性。編寫子序。子程序的引入,降低了程序的復雜性。編寫子程序還可以提高代碼的重用率。子程序實現(xiàn)的功能程序還可以提高代碼的重用率。子程序實現(xiàn)的功能相對獨立。如此,將大大提高程序編寫和維護的效相對獨立。如此,將大大提高程序編寫和維護的效率。率。Object PascalObject Pascal的子程序分為兩種:過
2、程(的子程序分為兩種:過程(procedureprocedure)和函數(和函數(functionfunction)。)。過程和函數的區(qū)別主要在于過程本身沒有返回值,而過程和函數的區(qū)別主要在于過程本身沒有返回值,而函數有一個返回值。另外,在定義過程時使用保留函數有一個返回值。另外,在定義過程時使用保留字字procedureprocedure,而定義函數使用保留字,而定義函數使用保留字functionfunction。一、過程和函數的聲明一、過程和函數的聲明1. 1. 過程聲明過程聲明procedure procedure 過程名過程名( (參數表參數表);); beginbegin end;e
3、nd;過程名過程名即過程標識符。即過程標識符。局部聲明部分局部聲明部分用于聲明僅限于該過用于聲明僅限于該過程內引用的常量、自定義數據類型、變量、過程和函程內引用的常量、自定義數據類型、變量、過程和函數等。數等。參數表參數表內聲明參數的個數和類型,同類型參數內聲明參數的個數和類型,同類型參數之間以之間以逗號逗號分隔,不同類型參數之間以分隔,不同類型參數之間以分號分號分隔。分隔。2. 2. 函數聲明函數聲明function function 函數名函數名( (參數表參數表):):返回數據類型返回數據類型; ; beginbegin end;end;函數首部函數首部除了聲明函數的標識符、形式參數表以
4、外,除了聲明函數的標識符、形式參數表以外,必需在冒號之后聲明函數必需在冒號之后聲明函數返回數據類型返回數據類型。局部聲明局部聲明部分與過程的局部聲明部分類似。部分與過程的局部聲明部分類似。函數名函數名本身作為一個特殊的變量,與系統(tǒng)預先定義的本身作為一個特殊的變量,與系統(tǒng)預先定義的變量變量ResultResult一樣,可在函數體中接受賦值,一樣,可在函數體中接受賦值,用來存用來存儲函數返回值儲函數返回值。過程和函數首部中聲明的參數稱為過程和函數首部中聲明的參數稱為形式參數形式參數,簡稱形參。,簡稱形參。形式參數,以及過程和函數局部聲明的各種標識符形式參數,以及過程和函數局部聲明的各種標識符(如常
5、量、數據類型、變量、過程、函數等)均為(如常量、數據類型、變量、過程、函數等)均為局局部部的,即它們的的,即它們的作用范圍只在該過程或函數中作用范圍只在該過程或函數中,在局,在局部范圍內有效。部范圍內有效。全局標識符全局標識符是在主程序中定義的,其是在主程序中定義的,其作用范圍在主程序和子程序。由于任一被調用的子程作用范圍在主程序和子程序。由于任一被調用的子程序中可以隨意地訪問全局變量,全局變量的數據缺乏序中可以隨意地訪問全局變量,全局變量的數據缺乏可靠和安全,因此,應盡量避免在子程序中直接訪問可靠和安全,因此,應盡量避免在子程序中直接訪問全局變量,而是通過參數來傳遞外部數據,進行間接全局變量
6、,而是通過參數來傳遞外部數據,進行間接訪問。訪問。二、過程和函數調用二、過程和函數調用 如同標準過程和函數的調用一樣,程序中如同標準過程和函數的調用一樣,程序中可以調用自定義的過程和函數。過程調用的形可以調用自定義的過程和函數。過程調用的形式是以其作為一條單獨的語句。式是以其作為一條單獨的語句。 函數也可以單獨作為一條語句來調用,而函數也可以單獨作為一條語句來調用,而更一般的是把函數作為表達式,或表達式的一更一般的是把函數作為表達式,或表達式的一部分的形式進行調用的,部分的形式進行調用的, 函數作為一條單獨的語句是合法的,但多數函數作為一條單獨的語句是合法的,但多數情況下,調用函數主要是為了獲
7、得其返回值,情況下,調用函數主要是為了獲得其返回值,因此函數作為一條單獨語句調用通常實際意義因此函數作為一條單獨語句調用通常實際意義不大。不大。三、參數傳遞三、參數傳遞過程或函數調用時,調用語句中傳遞給過程或函數的參數過程或函數調用時,調用語句中傳遞給過程或函數的參數稱為稱為實際參數實際參數,簡稱實參。實參的個數、數據類型和,簡稱實參。實參的個數、數據類型和順序必須與形式參數一一對應,多個參數之間用逗號順序必須與形式參數一一對應,多個參數之間用逗號隔開。隔開。 形式參數形式參數出現(xiàn)在過程和函數聲明的首部,形式參數分出現(xiàn)在過程和函數聲明的首部,形式參數分為三類:為三類:值參數值參數(簡稱值參)、
8、(簡稱值參)、變量參數變量參數(簡稱變參)(簡稱變參)和和常量參數常量參數。三者在聲明時的修飾和實參的區(qū)別分述。三者在聲明時的修飾和實參的區(qū)別分述如下:如下: 值參數值參數聲明時,形參的前面無任何修飾,值參傳遞的聲明時,形參的前面無任何修飾,值參傳遞的是一個值。調用時,實參的值拷貝給形參,是一個值。調用時,實參的值拷貝給形參,形參值的形參值的改變不影響其對應實參的值改變不影響其對應實參的值。 變量參數變量參數聲明時,形參的前面用保留字聲明時,形參的前面用保留字varvar修飾。變修飾。變參傳遞的是一個變量的地址,即實參把地址傳遞給參傳遞的是一個變量的地址,即實參把地址傳遞給變變參,這樣變參和參
9、,這樣變參和實參指向的是同一地址空間,因此,實參指向的是同一地址空間,因此,在在過程和函數中對變參的修改,直接影響實參過程和函數中對變參的修改,直接影響實參。顯然。顯然可以利用變參為被調子程序(函數或過程)可以利用變參為被調子程序(函數或過程)“傳遞傳遞”數據給主調程序。數據給主調程序。 常量參數常量參數聲明時,形參的前面用保留字聲明時,形參的前面用保留字constconst修飾。修飾。常量參數的傳遞形式本質上類似于值參,但在子程序常量參數的傳遞形式本質上類似于值參,但在子程序中,它相當于局部的類型常量,中,它相當于局部的類型常量,不能對常量參數進行不能對常量參數進行賦值賦值。常量參數的使用可
10、以防止子程序對實參的修改。常量參數的使用可以防止子程序對實參的修改。在函數或過程定義中,可以給值參數設置一個在函數或過程定義中,可以給值參數設置一個默認值默認值。在調用子程序(過程或函數)時,如果沒有提供相應在調用子程序(過程或函數)時,如果沒有提供相應的實參,那么子程序即以默認值作為初值。的實參,那么子程序即以默認值作為初值。注意注意:參:參數的默認值只能從參數表的數的默認值只能從參數表的右邊開始默認右邊開始默認,且中間不且中間不能跳躍能跳躍,此外,變,此外,變參不參不能設置默認值。能設置默認值。例如:例如:procedure FillArray(a:array of Integer;pro
11、cedure FillArray(a:array of Integer; value:Integer=0); value:Integer=0); 值參值參valuevalue是默認參數,缺省值為是默認參數,缺省值為0 0,可以有如下兩種調,可以有如下兩種調用方式:用方式:FillArray(MyArray); / FillArray(MyArray); / 參數參數valuevalue使用缺省值使用缺省值0 0FillArray(MyArray,10); / FillArray(MyArray,10); / 參數參數valuevalue指值指值1010四、過程和函數重載四、過程和函數重載過程和
12、函數重載是指定義多個名稱相同,而參數列表不過程和函數重載是指定義多個名稱相同,而參數列表不同的過程和函數。編譯器依據調用時實參表中同的過程和函數。編譯器依據調用時實參表中參數個參數個數和類型數和類型,自動匹配一個重載的過程或函數。重載過,自動匹配一個重載的過程或函數。重載過程和函數首部句尾應使用保留字程和函數首部句尾應使用保留字overloadoverload修飾。修飾。例如:例如:function add(a,b:integer):integer; overload;function add(a,b:integer):integer; overload;beginbegin result :
13、= a + b; result := a + b;end;end;function add(a,b:real):real; overload;function add(a,b:real):real; overload;beginbegin result := a + b; result := a + b;end;end;function add(a,b:string):string; overload;function add(a,b:string):string; overload;beginbegin result := a + b; result := a + b;end;end;重載過
14、程或函數使用默認參數可能會導致二義性錯誤。重載過程或函數使用默認參數可能會導致二義性錯誤。如:如:function f1(a:integer; b:integer=10); overload; function f1(a:integer; b:integer=10); overload; beginbegin result := a + b; result := a + b;end;end;function f1(a:integer):overload; function f1(a:integer):overload; beginbegin result := a result := a* *a;a;end;end;五、過程和函數的遞歸調用五、過程和函數的遞歸調用 遞歸調用遞歸調用是指是指子程序子程序(函數或過程)(函數或過程)調用子程序自身調用子程序自身。遞歸在解決某些問題時是十分有用的方法,它可以使遞歸在解決某些問題時是十分有用的方法
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年西安市慶華醫(yī)院招聘備考題庫(9人)及答案詳解參考
- 虛擬現(xiàn)實技術標準保證承諾書8篇范文
- 公司合規(guī)生產保證承諾書(4篇)
- 2026年春季開學典禮校長講話:沐春風啟新程以奮斗赴韶華
- 企業(yè)風險評估及防范策略模板
- 承接煙囪施工方案(3篇)
- 操場圍欄施工方案(3篇)
- 施工方案及造價(3篇)
- 木墻面施工方案(3篇)
- 樓盤懷舊活動方案策劃(3篇)
- 孕婦貧血教學課件
- 5年(2021-2025)山東高考生物真題分類匯編:專題17 基因工程(解析版)
- 新華資產招聘筆試題庫2025
- 智能化項目驗收流程指南
- 搶劫案件偵查課件
- 2026年遼寧軌道交通職業(yè)學院單招職業(yè)技能測試題庫必考題
- 雨課堂在線學堂《中國古代舞蹈史》單元考核測試答案
- 老年人遠離非法集資講座
- 沙子石子采購合同范本
- 軍采協(xié)議供貨合同范本
- 2025年醫(yī)院年度應急演練計劃表
評論
0/150
提交評論