程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi_08_Delphi_Object_Pascal_基本語法_06_函數參數,delphiobjectpascal

Delphi_08_Delphi_Object_Pascal_基本語法_06_函數參數,delphiobjectpascal

編輯:Delphi

Delphi_08_Delphi_Object_Pascal_基本語法_06_函數參數,delphiobjectpascal


   發現Delphi中關於函數參數部分的內容還是比較多的,暫時說到這篇隨筆為止吧,以後再繼續討論一下函數的參數部分的內容。

一 工程文件

program DefaultParameter;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Unit1 in 'unit1.pas';

var
    nVar:integer;
    strVar:string;
    i:integer;
    nVarArray:array of integer;
begin
    {
    1、 調用具有默認參數的方法
    }
    //不提供參數
    unit1.defaultParameter(10);
    //提供參數
    unit1.defaultParameter(10,'volcanol');

    //調用無類型參數的函數
    {
    1、constant object cannot be passed as var paramter
    }
    //WriteLn(noTypeParameter('100'));  //這樣無法調用
    nVar := 100;
    WriteLn(noTypeParameter(nVar));

    //轉換時出現了異常,因此不建議使用無類型參數
    strVar:= '100';
    WriteLn(noTypeParameter(strVar));

    //調用短字符串類型參數的函數
    for i := 0 to sizeof(ShortString)  do
    begin
         strVar[i]:='a';
    end;
    shortSringParameter(strVar);

    //如果將 string類型的變量傳遞給 shortString 類型變量會自動截斷
    for i := 0 to sizeof(ShortString) + 128 do
    begin
         strVar[i]:= 'a';
    end;
    shortSringParameter(strVar);

    //動態數組參數
    try
        SetLength(nVarArray,10);
        WriteLn(Low(nVarArray));
        WriteLn(High(nVarArray));
        for i := Low(nVarArray) to High(nVarArray)  do
        begin
            nVarArray[i] := i;
        end;
        WriteLn(High(nVarArray));
        arrayParameter(nVarArray);
    except
        on E:Exception do
            ReadLn;
    end;


    ReadLn;
    ReadLn;
end.

 

二、單元文件

{       參數
1、默認參數
2、無類型參數
3、短字符串參數
4、數組參數
}

{
1、 和其他的OOP編程語言一樣,Delphi的Object Pascal語言也支持方法和函數的
    默認參數機制
2、 默認參數在某些場合非常適用,當一些方法、函數的參數在不同的場合調用時
    均具有同樣的設置時,就可以設置為默認參數
3、 如何函數參數設置過默認參數,那麼在調用的時候就可以不提供實際參數
}

unit Unit1;



interface
{
    單元文件的結構需要注意
}
uses
    SysUtils;

{
    單元文件中, type類型定義必須在 uses 子句後面
}
type
    PInt=^integer;

{       默認參數
1、默認參數的定義的規則與C++裡面默認參數的規則類似
2、默認參數定義的形式參數必須從最後一個參數開始,及從右往左定義
3、如果一個參數定義了默認參數,則其後面的參數均需要定義默認參數
4、如果在一個類型中定義了多個形式參數,則這些形式參數均不能定義默認參數
5、
}
procedure defaultParameter(nVar:integer;varStr:string='Delphi');

{       無類型參數
1、無類型參數就是例程聲明時形式參數不指定形式參數的類型
2、無類型參數定義時必須用關鍵字var、const、out之中的一個
3、無類型參數不能使默認的傳值方式
4、在使用無類型參數時,必須將參數進行類型轉換後才能使用
5、調用時需要注意存在一些限制
   A) 整型字面值不能傳遞給無類型參數
   B) 無類型的整型值不能傳遞給無類型參數
6、由於無類型參數在轉換的時候存在太多的限制,建議一般不要使用這種類型的定義
    方法
}
function noTypeParameter(var noTypeVar):string;


{       短字符串參數
1、 短字符串類型 ShortString 是255字節長度的字符串類型
2、 可以通過 string[length] 的方法定義指定長度小於255字節的字符串類型
    varStr:string[255]; 就是定義一個長度最大為255字節的字符串變量
3、 形式參數不能用 string[length] 的方式定義 ,如果需要的話就必須定義新的
    數據類型
3、 2010以後 string默認為WideString, 需要打開開關才能使 AnsiString類型
}
procedure shortSringParameter(strVar:ShortString);


{       數組參數
1、數組分為靜態數組、動態數組,還有一種數組類型 開發數組
2、靜態數組定義為
        nVarArray:array[1..10] of integer; //在定義的時候自定數組維度
3、動態數組定義為
        定義動態數組類型
        nVarArray:array of integer;  //定義時不指定數組的維度,
    使用前用 SetLength(數組名,第一維的長度,第二維的長度,) 函數申請
    數組空間。
3、數組參數在定義時不能指定數組的維度和大小,要使用指定類型的參數,則必須定義
   新的數據類型
4、還可以使用開放數組形式定義數組參數
}
procedure arrayParameter(nVarArray:array of integer);


implementation
procedure defaultParameter(nVar:integer;varStr:string='Delphi');
var
    str:string;
begin
    str := 'Hello ' + varStr;
    WriteLn(str);
end;

function noTypeParameter(var noTypeVar):string;
var
    str:string;
begin
    //將 noTypeVar 無類型參數轉換為整型數
    str:= IntToStr(integer(noTypeVar));

    //隱含的變量 result 返回函數值
    result := str;
end;



procedure shortSringParameter(strVar:ShortString);
begin
    WriteLn(strVar);
end;

{
1、下面的函數執行的過程中還存在一定的問題,需要繼續研究一下
2、動態數組的上、下界最好通過Low()、High()函數來求取,所以與 C/C++ 有一點區別
}
procedure arrayParameter(nVarArray:array of integer);
var
    i:integer;
begin
    WriteLn(Low(nVarArray));
    WriteLn(High(nVarArray));

    for i := Low(nVarArray) to High(nVarArray) do
    begin
        //WriteLn(IntToStr(nVarArray[i])); //這樣編譯就會出錯,原因??
        WriteLn(nVarArray[i])  ;
    end;
end;

end.

 

  歡迎轉載本系列文章,轉載請注明來源。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved