• volcanol的工控博客


      这里简单的描述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.

    欢迎转载,转载请注明来源。

  • 相关阅读:
    C++ 多态性之虚函数&抽象类&纯虚函数
    转帖:iOS UIWindow & UIWindowLevel
    转帖:iOS UINavigationController 对象
    iOS 数据持久化 NSUserDefault
    ----百度地图api----
    ----改写superheros的json以及上传到github----
    ----XMLHttpRequestAPI简单介绍----
    ----event flow----
    ----Arrow functions----
    ----constructor 与 object----
  • 原文地址:https://www.cnblogs.com/volcanol/p/5324449.html
Copyright © 2020-2023  润新知