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

Delphi_04_Delphi_Object_Pascal_基本語法_02,delphiobjectpascal

編輯:Delphi

Delphi_04_Delphi_Object_Pascal_基本語法_02,delphiobjectpascal


  這裡簡單的描述Object的語法中的基本內容,數據類型。因為代碼是自描述的所以不廢話,直接貼代碼。

{       用戶自定義類型
1、數組
2、動態數組
3、記錄
4、集合
}


program UserDefine;

{$APPTYPE CONSOLE}



uses
  SysUtils;
{       記錄
1、記錄相當於C語言中的結構體
2、記錄類型通過 type 和 record 關鍵字來定義
3、記錄類型要在使用前定義,通常放在 var 定義之前說
4、可以定義可變記錄類型,可變記錄類型就和C語言中的unio類型類似
}
//定義一個記錄類型
type
    person = record
        name:string;
        id  :integer;
    end;

    {   定義可變記錄類型
    1、注意定義可變記錄的關鍵字 record
    2、case 注意定義的形式和語法, 其中,case後面沒有配對的關鍵字
    }
    TvariantRecord = record
        nullStr:pchar;
        intField:integer;
        case integer of
            0:(D:double);
            1:(I:integer);
            2:(C:char);
    end;

    {   集合
    1、集合就是和代數中的集合一樣理解, 有點類似於C/C++中的枚舉
    2、集合可以進行求交集、並集等操作
    3、集合的定義通過 set 來實現
    4、集合最大只能容納 256 各元素
    5、集合只能用在序數類型定義,字符串、實數等不能定義
    }
    TCharSet = set of ansichar;
    TWeekSet = set of 0..7 ;  //定義星期的集合
    //TSingleset = set of single;  這個定義要注意

var
    {       數組
    1、數組的下標可以不必從默認的 0 開始,可以從其他數值開始
    2、通過 Low 和 High 函數可以求出不從0開始的數組下標的下界和上界
    3、多維數組的定義通過逗號在數組定義的 [一維長度,二維長度,...]
    }
    //定義一個數組數組相當於C語言中的 int nArray[8]
    //下表從 0 開始,到7 結束
    nArray:array[0..7] of integer;

    //定義一個數組  相當於C語言中的 char chArray[8]
    //下表從 1 開始,到 8 結束
    chArray:array[1..8] of ansichar;

    //定義一個3元素的數組
    fArray:array[10..12] of real;

    //定義一個多維數組
    nMatrix:array[1..2,1..2] of integer;


    {       動態數組
    1、動態數組是在編譯期間不能確定維數的數組,需要在運行時確定維數的數組
    2、動態數組在使用前必須先分配內存空間
    3、注意在兩個不同行定義的動態數組的類型不一樣,如下所示
    4、多維動態數組
    }
    nDynamicArray:array of integer;
    //下面兩個動態數組類型一樣
    nA1,nA2:array of integer;
    {   下面兩個動態數組類型不一樣
    nA1:array of integer
    nA2:array of inter
    }
    nA3,nA4:array of integer;
    nA5:array of array of integer;
    nA6:array of array of integer;

    //定義一個record類型變量,注意這裡不需要關鍵字record
    p1:person;
    p2:person;
    p3:person;

    {       可變記錄
    1、可變記錄的聲明和定義與其他變量的定義一樣
    }
    variRecord:TvariantRecord;

    {   集合變量
    1、集合的定義與其他數據類型一致
    2、集合變量的賦值和初始化必須使用 [ ], 集合成員之間用逗號隔開
    }
    charSet:TCharSet = ['a','b'];
    charSet_1 : TCharSet = ['b','c','d'];
    weekSet:TWeekSet = [0];


begin
    //引用
    nArray[0]:= 10;

    {   引用chArray[0] 錯誤,因為下標從1開始
    chArray[0] := 'a';
    }

    //通過函數 Low 和 High 返回下界和上界
    nArray[1]:=Low(fArray);
    //注意數組的上界
    nArray[7]:=High(fArray);

    //訪問二維數組中的元素,注意Delphi中多維數組訪問元素的與C語言中的差別
    nMatrix[1,1] := 1;
    nMatrix[1,2] := 2;
    nMatrix[2,1] := 3;
    nMatrix[2,2] := 4;

    {       訪問動態數組
    1、首先必須申請內存
    2、然後就可以和靜態數組一樣訪問,此時的數組下標從0開始,需要注意
    3、動態數組是生存期管理類型,即超過生存期後,就由系統自動回收
    4、可以通過將動態數組賦值為 nil 就可以提前回收內存。
    5、動態數組時引用類型,有點類似於ansistring
    }
    SetLength(nDynamicArray,30);
    nDynamicArray[0]:= 10;
    writeln(Low(nDynamicArray));
    Writeln(High(nDynamicArray));
    //手動回收內存
    nDynamicArray := nil;
    //nDynamicArray[0]:= 10; //因為訪問錯誤的內存,因此會提前退出程序運行
    SetLength(nA1,2);
    nA2 := nA1;
    nA1[0] := 10;
    nA2[0] := 23;
    //因為nA2是nA1的引用,所以 nA1[0] 也等於23
    writeln(nA1[0]);

    {
    1、注意下面的一段代碼與前面代碼的區別,上面 nA1與nA2引用同一段內存
    2、下面nA3和nA4指向不同的代碼。
    }
    SetLength(nA3,2);
    nA3[0] := 14;
    nA4 := copy(nA3);
    nA4[0] := 15;
    writeln(nA3[0]);

    {   多維動態數組
    1、多維動態數組和一維動態數組一樣,使用之前被必須申請空間,賦值和copy也會
    分配空間。
    2、多維動態數組可以分多次給各維申請空間
    }
    //單次分配一維的空間
    setlength(nA5,1);
    //單次分配全部兩維的空間
    setlength(nA6,1,1);

    //訪問記錄變量
    p1.name := 'volacanol';
    p1.id := 512;
    //記錄的直接賦值
    p2 := p1;
    //通過with語句賦值記錄的成員
    with  p3 do
    begin
        name := 'cnblogs';
        id := 100;
    end;

    // 引用可變記錄
    variRecord.nullStr := 'This is null string field.';
    variRecord.intField := 10;
    //  下面是可變記錄的可變域,是double類型
    variRecord.D := 10.0 ;
    writeln(variRecord.D);

    //  下面是可變記錄的可變域,是integer類型
    variRecord.I := 5;
    writeln(variRecord.I);

    //  下面是可變記錄的可變域,是char 類型
    varirecord.C := 'a';
     writeln(variRecord.c);

    // 用 with 語句來初始化可變記錄的域,這個與
    with variRecord do
    begin
        nullStr :='This is null string field.';
        intField := 19;
        d := 13.0 ;
        i := 6 ;
        c := 'b';
    end;
    writeln(variRecord.D);  // 輸出為13.0 為巧合
    writeln(variRecord.I);  // 輸出為 98 是因為 b ascii 碼值 == 98
    writeln(variRecord.c);  // 最後輸出為 b 才是正確的


    {       集合的操作
    1、判斷元素是否在集合裡面, 通過關鍵字 in 來實現
    2、集合的並集
    3、集合的交集
    4、往集合中增加元素
    5、從集合中刪除元素
    }
    //判斷元素是否在集合裡面
    if 'a' in charSet then
    begin
        writeln('a is in charSet');
    end;

    // 集合的並集
    if 'b' in (charSet + charSet_1 ) then
    begin
        writeln('b is in charSet + charSet_1');
    end;


    // 集合的交集
    if 'd' in (charSet * charSet_1 ) then
    begin
        writeln('d is in charSet * charSet_1');
    end;

    //通過 Include 和 Exclude  函數或者 + - 運算符增刪結合中的元素
    //注意集合元素必須用 [ ]
    charSet := charSet + ['y'];
    if 'y' in charSet then
    begin
        writeln('y is in charSet.');
    end;

    // 通過 Include 函數增加集合元素, 注意 include 函數中集合元素
    // 不需要 [ ] 來表示。
    Include(charSet,'x');
    if 'x' in charSet then
    begin
        writeln('x is in charSet.');
    end;

    //通過Exclude刪除集合元素
    Exclude(charSet,'x');
    if not ('x' in charSet) then
    begin
        writeln('after exclude x is not in charSet');
    end;


    readln;
end.

 

歡迎轉載,轉載請注明來源。

 

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