这里简单的描述Object的语法中的基本内容,数据类型。因为代码是自描述的所以不废话,直接贴代码。

{       用户自定义类型
1、数组
2、动态数组
3、记录
4、集合
}program UserDefine;{$APPTYPE CONSOLE}usesSysUtils;
{       记录
1、记录相当于C语言中的结构体
2、记录类型通过 type 和 record 关键字来定义
3、记录类型要在使用前定义,通常放在 var 定义之前说
4、可以定义可变记录类型,可变记录类型就和C语言中的unio类型类似
}
//定义一个记录类型
typeperson = recordname:string;id  :integer;end;{   定义可变记录类型1、注意定义可变记录的关键字 record2、case 注意定义的形式和语法, 其中,case后面没有配对的关键字}TvariantRecord = recordnullStr:pchar;intField:integer;case integer of0:(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 integernA2: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] 也等于23writeln(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 dobeginname := '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 dobeginnullStr :='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 码值 == 98writeln(variRecord.c);  // 最后输出为 b 才是正确的{       集合的操作1、判断元素是否在集合里面, 通过关键字 in 来实现2、集合的并集3、集合的交集4、往集合中增加元素5、从集合中删除元素}//判断元素是否在集合里面if 'a' in charSet thenbeginwriteln('a is in charSet');end;// 集合的并集if 'b' in (charSet + charSet_1 ) thenbeginwriteln('b is in charSet + charSet_1');end;// 集合的交集if 'd' in (charSet * charSet_1 ) thenbeginwriteln('d is in charSet * charSet_1');end;//通过 Include 和 Exclude  函数或者 + - 运算符增删结合中的元素//注意集合元素必须用 [ ]charSet := charSet + ['y'];if 'y' in charSet thenbeginwriteln('y is in charSet.');end;// 通过 Include 函数增加集合元素, 注意 include 函数中集合元素// 不需要 [ ] 来表示。Include(charSet,'x');if 'x' in charSet thenbeginwriteln('x is in charSet.');end;//通过Exclude删除集合元素Exclude(charSet,'x');if not ('x' in charSet) thenbeginwriteln('after exclude x is not in charSet');end;readln;
end.

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

转载于:https://www.cnblogs.com/volcanol/p/5324449.html

Delphi_04_Delphi_Object_Pascal_基本语法_02相关推荐

  1. 【JavaScript总结】JavaScript语法基础:BOM

    DOM是文档对象模型,操作对象是文档 window.document,和浏览器没有直接关系 DOM常用事件: onload,onbeforeunload, onunload onclick,ondbl ...

  2. 【JavaScript总结】JavaScript语法基础:JS编码

    运算符 数学:+. -. *. / 逻辑:>. < .>= .<=. == . !=.&&.|| . === .!==(完全等于) 对象相关 new delet ...

  3. 【JavaScript总结】JavaScript语法基础:数据类型

    ------>数据类型有哪些? ->基本类型:数字类型,布尔类型,字符串类型 ->引用类型:对象类型,函数类型 ->空类型:null 和 undefined ->运算符: ...

  4. 第二天:Vue基础语法

    1.计算属性的setter和getter 每个计算属性都有setter和getter 一般来说用到setter较少,都不希望数据被改动,所以只用getter时也有缩写 <!DOCTYPE htm ...

  5. LLVM语法语义指令特性

    LLVM语法语义指令特性 High Level Structure Module Structure LLVM 程序由Module's组成,每个 's 是输入程序的一个翻译单元.每个模块由函数,全局变 ...

  6. LLVM一些编程语法语义特性

    LLVM一些编程语法语义特性 High Level Structure Module Structure LLVM 程序由Module's组成,每个 's 是输入程序的一个翻译单元.每个模块由函数.全 ...

  7. LLVM一些语法规则

    LLVM一些语法规则 LLVM文档 LLVM编译器基础架构支持广泛的项目,从工业强度编译器到专门的JIT应用程序,再到小型研究项目. 同样,文档分为几个针对不同受众的高级别分组: LLVM设计概述 几 ...

  8. 2021年大数据Hive(四):Hive查询语法

    全网最详细的Hive文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 系列历史文章 前言 hive查询语法 一.SELECT语句 1.语句结构 2.全表查 ...

  9. 2021年大数据常用语言Scala(十八):基础语法学习 Map对象

    目录 Map对象 不可变Map 可变Map Map基本操作 Map对象 Map可以称之为映射.它是由键值对组成的集合.在scala中,Map也分为不可变Map和可变Map. 不可变Map 定义 语法 ...

最新文章

  1. 软件驱动安装在docker_docker 安装软件
  2. opencv-python将视频切分成帧
  3. Android开发经典笔试面试题汇总(持续更新中)
  4. JDK 9 REPL:入门
  5. vue v html安全,vue 中控制v-html 中的样式,但不影响全局的小技巧
  6. Pagination(分页) 从前台到后端总结
  7. 【机器学习-西瓜书】二、性能度量:召回率;P-R曲线;F1值;ROC;AUC
  8. 最新的.net书籍教程 更新时间:2005-9-5
  9. spring MVC 使用 modelAndView.setViewName(forward:*.action) 发送重定向
  10. 相亲交友小程序开发方案及源码
  11. java单例的生命周期_Spring Bean生命周期详解
  12. vr虚拟现实计算机配置,什么样的电脑配置才能玩得起VR?
  13. 【网络】应用层-HTTP协议
  14. shell学习笔记---工具学习
  15. 【书影观后感 三】1587—雪后的大明
  16. 解决工作流:org.activiti.engine.ActivitiException: Unknown property used in expression: ${AAAAA}报错
  17. 一幅长文细学Vue(一)——Webpack打包工具
  18. JDBC(数据库和Java)
  19. markdown 换行_Markdown编辑神器-Typora
  20. Python-Django毕业设计快递寄取微信小程序(程序+Lw)

热门文章

  1. 在 Android 开发中使用 Kotlin 协程 (一) -- 初识 Kotlin 协程
  2. 关于 通过http请求 无法访问Linux下的ftp服务的解决办法!
  3. JavaScript基础一
  4. tensorflow model save and restore
  5. 支付宝app支付对接2(文档和对接注意问题)
  6. 存储过程与事务应用两三事
  7. SCCM 2012系列之新特性概览一:SCCM 2012安装选项和控制台新界面预览
  8. 判断图有无环_萧阳环保教你判断布袋除尘器是否合格记住这3点
  9. ASP.NET自定义控件组件开发 第一章 第二篇 接着待续
  10. Win10系统下安装VC6.0教程