Delphi第5章過程和函數(shù)_第1頁
Delphi第5章過程和函數(shù)_第2頁
Delphi第5章過程和函數(shù)_第3頁
Delphi第5章過程和函數(shù)_第4頁
Delphi第5章過程和函數(shù)_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第五章第五章 過程與函數(shù)過程與函數(shù) DelphiDelphi中,有許多預(yù)先定義好的子程序,它們統(tǒng)稱為中,有許多預(yù)先定義好的子程序,它們統(tǒng)稱為運行庫。運行庫。Object PascalObject Pascal也允許程序員自己定義子程也允許程序員自己定義子程序。子程序的引入,降低了程序的復(fù)雜性。編寫子序。子程序的引入,降低了程序的復(fù)雜性。編寫子程序還可以提高代碼的重用率。子程序?qū)崿F(xiàn)的功能程序還可以提高代碼的重用率。子程序?qū)崿F(xiàn)的功能相對獨立。如此,將大大提高程序編寫和維護的效相對獨立。如此,將大大提高程序編寫和維護的效率。率。Object PascalObject Pascal的子程序分為兩種:過

2、程(的子程序分為兩種:過程(procedureprocedure)和函數(shù)(和函數(shù)(functionfunction)。)。過程和函數(shù)的區(qū)別主要在于過程本身沒有返回值,而過程和函數(shù)的區(qū)別主要在于過程本身沒有返回值,而函數(shù)有一個返回值。另外,在定義過程時使用保留函數(shù)有一個返回值。另外,在定義過程時使用保留字字procedureprocedure,而定義函數(shù)使用保留字,而定義函數(shù)使用保留字functionfunction。一、過程和函數(shù)的聲明一、過程和函數(shù)的聲明1. 1. 過程聲明過程聲明procedure procedure 過程名過程名( (參數(shù)表參數(shù)表);); beginbegin end;e

3、nd;過程名過程名即過程標(biāo)識符。即過程標(biāo)識符。局部聲明部分局部聲明部分用于聲明僅限于該過用于聲明僅限于該過程內(nèi)引用的常量、自定義數(shù)據(jù)類型、變量、過程和函程內(nèi)引用的常量、自定義數(shù)據(jù)類型、變量、過程和函數(shù)等。數(shù)等。參數(shù)表參數(shù)表內(nèi)聲明參數(shù)的個數(shù)和類型,同類型參數(shù)內(nèi)聲明參數(shù)的個數(shù)和類型,同類型參數(shù)之間以之間以逗號逗號分隔,不同類型參數(shù)之間以分隔,不同類型參數(shù)之間以分號分號分隔。分隔。2. 2. 函數(shù)聲明函數(shù)聲明function function 函數(shù)名函數(shù)名( (參數(shù)表參數(shù)表):):返回數(shù)據(jù)類型返回數(shù)據(jù)類型; ; beginbegin end;end;函數(shù)首部函數(shù)首部除了聲明函數(shù)的標(biāo)識符、形式參數(shù)表以

4、外,除了聲明函數(shù)的標(biāo)識符、形式參數(shù)表以外,必需在冒號之后聲明函數(shù)必需在冒號之后聲明函數(shù)返回數(shù)據(jù)類型返回數(shù)據(jù)類型。局部聲明局部聲明部分與過程的局部聲明部分類似。部分與過程的局部聲明部分類似。函數(shù)名函數(shù)名本身作為一個特殊的變量,與系統(tǒng)預(yù)先定義的本身作為一個特殊的變量,與系統(tǒng)預(yù)先定義的變量變量ResultResult一樣,可在函數(shù)體中接受賦值,一樣,可在函數(shù)體中接受賦值,用來存用來存儲函數(shù)返回值儲函數(shù)返回值。過程和函數(shù)首部中聲明的參數(shù)稱為過程和函數(shù)首部中聲明的參數(shù)稱為形式參數(shù)形式參數(shù),簡稱形參。,簡稱形參。形式參數(shù),以及過程和函數(shù)局部聲明的各種標(biāo)識符形式參數(shù),以及過程和函數(shù)局部聲明的各種標(biāo)識符(如常

5、量、數(shù)據(jù)類型、變量、過程、函數(shù)等)均為(如常量、數(shù)據(jù)類型、變量、過程、函數(shù)等)均為局局部部的,即它們的的,即它們的作用范圍只在該過程或函數(shù)中作用范圍只在該過程或函數(shù)中,在局,在局部范圍內(nèi)有效。部范圍內(nèi)有效。全局標(biāo)識符全局標(biāo)識符是在主程序中定義的,其是在主程序中定義的,其作用范圍在主程序和子程序。由于任一被調(diào)用的子程作用范圍在主程序和子程序。由于任一被調(diào)用的子程序中可以隨意地訪問全局變量,全局變量的數(shù)據(jù)缺乏序中可以隨意地訪問全局變量,全局變量的數(shù)據(jù)缺乏可靠和安全,因此,應(yīng)盡量避免在子程序中直接訪問可靠和安全,因此,應(yīng)盡量避免在子程序中直接訪問全局變量,而是通過參數(shù)來傳遞外部數(shù)據(jù),進行間接全局變量

6、,而是通過參數(shù)來傳遞外部數(shù)據(jù),進行間接訪問。訪問。二、過程和函數(shù)調(diào)用二、過程和函數(shù)調(diào)用 如同標(biāo)準(zhǔn)過程和函數(shù)的調(diào)用一樣,程序中如同標(biāo)準(zhǔn)過程和函數(shù)的調(diào)用一樣,程序中可以調(diào)用自定義的過程和函數(shù)。過程調(diào)用的形可以調(diào)用自定義的過程和函數(shù)。過程調(diào)用的形式是以其作為一條單獨的語句。式是以其作為一條單獨的語句。 函數(shù)也可以單獨作為一條語句來調(diào)用,而函數(shù)也可以單獨作為一條語句來調(diào)用,而更一般的是把函數(shù)作為表達式,或表達式的一更一般的是把函數(shù)作為表達式,或表達式的一部分的形式進行調(diào)用的,部分的形式進行調(diào)用的, 函數(shù)作為一條單獨的語句是合法的,但多數(shù)函數(shù)作為一條單獨的語句是合法的,但多數(shù)情況下,調(diào)用函數(shù)主要是為了獲

7、得其返回值,情況下,調(diào)用函數(shù)主要是為了獲得其返回值,因此函數(shù)作為一條單獨語句調(diào)用通常實際意義因此函數(shù)作為一條單獨語句調(diào)用通常實際意義不大。不大。三、參數(shù)傳遞三、參數(shù)傳遞過程或函數(shù)調(diào)用時,調(diào)用語句中傳遞給過程或函數(shù)的參數(shù)過程或函數(shù)調(diào)用時,調(diào)用語句中傳遞給過程或函數(shù)的參數(shù)稱為稱為實際參數(shù)實際參數(shù),簡稱實參。實參的個數(shù)、數(shù)據(jù)類型和,簡稱實參。實參的個數(shù)、數(shù)據(jù)類型和順序必須與形式參數(shù)一一對應(yīng),多個參數(shù)之間用逗號順序必須與形式參數(shù)一一對應(yīng),多個參數(shù)之間用逗號隔開。隔開。 形式參數(shù)形式參數(shù)出現(xiàn)在過程和函數(shù)聲明的首部,形式參數(shù)分出現(xiàn)在過程和函數(shù)聲明的首部,形式參數(shù)分為三類:為三類:值參數(shù)值參數(shù)(簡稱值參)、

8、(簡稱值參)、變量參數(shù)變量參數(shù)(簡稱變參)(簡稱變參)和和常量參數(shù)常量參數(shù)。三者在聲明時的修飾和實參的區(qū)別分述。三者在聲明時的修飾和實參的區(qū)別分述如下:如下: 值參數(shù)值參數(shù)聲明時,形參的前面無任何修飾,值參傳遞的聲明時,形參的前面無任何修飾,值參傳遞的是一個值。調(diào)用時,實參的值拷貝給形參,是一個值。調(diào)用時,實參的值拷貝給形參,形參值的形參值的改變不影響其對應(yīng)實參的值改變不影響其對應(yīng)實參的值。 變量參數(shù)變量參數(shù)聲明時,形參的前面用保留字聲明時,形參的前面用保留字varvar修飾。變修飾。變參傳遞的是一個變量的地址,即實參把地址傳遞給參傳遞的是一個變量的地址,即實參把地址傳遞給變變參,這樣變參和參

9、,這樣變參和實參指向的是同一地址空間,因此,實參指向的是同一地址空間,因此,在在過程和函數(shù)中對變參的修改,直接影響實參過程和函數(shù)中對變參的修改,直接影響實參。顯然。顯然可以利用變參為被調(diào)子程序(函數(shù)或過程)可以利用變參為被調(diào)子程序(函數(shù)或過程)“傳遞傳遞”數(shù)據(jù)給主調(diào)程序。數(shù)據(jù)給主調(diào)程序。 常量參數(shù)常量參數(shù)聲明時,形參的前面用保留字聲明時,形參的前面用保留字constconst修飾。修飾。常量參數(shù)的傳遞形式本質(zhì)上類似于值參,但在子程序常量參數(shù)的傳遞形式本質(zhì)上類似于值參,但在子程序中,它相當(dāng)于局部的類型常量,中,它相當(dāng)于局部的類型常量,不能對常量參數(shù)進行不能對常量參數(shù)進行賦值賦值。常量參數(shù)的使用可

10、以防止子程序?qū)崊⒌男薷?。常量參?shù)的使用可以防止子程序?qū)崊⒌男薷摹T诤瘮?shù)或過程定義中,可以給值參數(shù)設(shè)置一個在函數(shù)或過程定義中,可以給值參數(shù)設(shè)置一個默認值默認值。在調(diào)用子程序(過程或函數(shù))時,如果沒有提供相應(yīng)在調(diào)用子程序(過程或函數(shù))時,如果沒有提供相應(yīng)的實參,那么子程序即以默認值作為初值。的實參,那么子程序即以默認值作為初值。注意注意:參:參數(shù)的默認值只能從參數(shù)表的數(shù)的默認值只能從參數(shù)表的右邊開始默認右邊開始默認,且中間不且中間不能跳躍能跳躍,此外,變,此外,變參不參不能設(shè)置默認值。能設(shè)置默認值。例如:例如:procedure FillArray(a:array of Integer;pro

11、cedure FillArray(a:array of Integer; value:Integer=0); value:Integer=0); 值參值參valuevalue是默認參數(shù),缺省值為是默認參數(shù),缺省值為0 0,可以有如下兩種調(diào),可以有如下兩種調(diào)用方式:用方式:FillArray(MyArray); / FillArray(MyArray); / 參數(shù)參數(shù)valuevalue使用缺省值使用缺省值0 0FillArray(MyArray,10); / FillArray(MyArray,10); / 參數(shù)參數(shù)valuevalue指值指值1010四、過程和函數(shù)重載四、過程和函數(shù)重載過程和

12、函數(shù)重載是指定義多個名稱相同,而參數(shù)列表不過程和函數(shù)重載是指定義多個名稱相同,而參數(shù)列表不同的過程和函數(shù)。編譯器依據(jù)調(diào)用時實參表中同的過程和函數(shù)。編譯器依據(jù)調(diào)用時實參表中參數(shù)個參數(shù)個數(shù)和類型數(shù)和類型,自動匹配一個重載的過程或函數(shù)。重載過,自動匹配一個重載的過程或函數(shù)。重載過程和函數(shù)首部句尾應(yīng)使用保留字程和函數(shù)首部句尾應(yīng)使用保留字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、程或函數(shù)使用默認參數(shù)可能會導(dǎo)致二義性錯誤。重載過程或函數(shù)使用默認參數(shù)可能會導(dǎo)致二義性錯誤。如:如: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;五、過程和函數(shù)的遞歸調(diào)用五、過程和函數(shù)的遞歸調(diào)用 遞歸調(diào)用遞歸調(diào)用是指是指子程序子程序(函數(shù)或過程)(函數(shù)或過程)調(diào)用子程序自身調(diào)用子程序自身。遞歸在解決某些問題時是十分有用的方法,它可以使遞歸在解決某些問題時是十分有用的方法

溫馨提示

  • 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. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論