Delphi_04_Delphi_Object_Pascal_基本语法_02
这里简单的描述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
:(D:double);
:(I:integer);
:(C:char);
end; { 集合
1、集合就是和代数中的集合一样理解, 有点类似于C/C++中的枚举
2、集合可以进行求交集、并集等操作
3、集合的定义通过 set 来实现
4、集合最大只能容纳 256 各元素
5、集合只能用在序数类型定义,字符串、实数等不能定义
}
TCharSet = set of ansichar;
TWeekSet = set of .. ; //定义星期的集合
//TSingleset = set of single; 这个定义要注意 var
{ 数组
1、数组的下标可以不必从默认的 0 开始,可以从其他数值开始
2、通过 Low 和 High 函数可以求出不从0开始的数组下标的下界和上界
3、多维数组的定义通过逗号在数组定义的 [一维长度,二维长度,...]
}
//定义一个数组数组相当于C语言中的 int nArray[8]
//下表从 0 开始,到7 结束
nArray:array[..] of integer; //定义一个数组 相当于C语言中的 char chArray[8]
//下表从 1 开始,到 8 结束
chArray:array[..] of ansichar; //定义一个3元素的数组
fArray:array[..] of real; //定义一个多维数组
nMatrix:array[..,..] 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_ : TCharSet = ['b','c','d'];
weekSet:TWeekSet = []; begin
//引用
nArray[]:= ; { 引用chArray[0] 错误,因为下标从1开始
chArray[0] := 'a';
} //通过函数 Low 和 High 返回下界和上界
nArray[]:=Low(fArray);
//注意数组的上界
nArray[]:=High(fArray); //访问二维数组中的元素,注意Delphi中多维数组访问元素的与C语言中的差别
nMatrix[,] := ;
nMatrix[,] := ;
nMatrix[,] := ;
nMatrix[,] := ; { 访问动态数组
1、首先必须申请内存
2、然后就可以和静态数组一样访问,此时的数组下标从0开始,需要注意
3、动态数组是生存期管理类型,即超过生存期后,就由系统自动回收
4、可以通过将动态数组赋值为 nil 就可以提前回收内存。
5、动态数组时引用类型,有点类似于ansistring
}
SetLength(nDynamicArray,);
nDynamicArray[]:= ;
writeln(Low(nDynamicArray));
Writeln(High(nDynamicArray));
//手动回收内存
nDynamicArray := nil;
//nDynamicArray[0]:= 10; //因为访问错误的内存,因此会提前退出程序运行
SetLength(nA1,);
nA2 := nA1;
nA1[] := ;
nA2[] := ;
//因为nA2是nA1的引用,所以 nA1[0] 也等于23
writeln(nA1[]); {
1、注意下面的一段代码与前面代码的区别,上面 nA1与nA2引用同一段内存
2、下面nA3和nA4指向不同的代码。
}
SetLength(nA3,);
nA3[] := ;
nA4 := copy(nA3);
nA4[] := ;
writeln(nA3[]); { 多维动态数组
1、多维动态数组和一维动态数组一样,使用之前被必须申请空间,赋值和copy也会
分配空间。
2、多维动态数组可以分多次给各维申请空间
}
//单次分配一维的空间
setlength(nA5,);
//单次分配全部两维的空间
setlength(nA6,,); //访问记录变量
p1.name := 'volacanol';
p1.id := ;
//记录的直接赋值
p2 := p1;
//通过with语句赋值记录的成员
with p3 do
begin
name := 'cnblogs';
id := ;
end; // 引用可变记录
variRecord.nullStr := 'This is null string field.';
variRecord.intField := ;
// 下面是可变记录的可变域,是double类型
variRecord.D := 10.0 ;
writeln(variRecord.D); // 下面是可变记录的可变域,是integer类型
variRecord.I := ;
writeln(variRecord.I); // 下面是可变记录的可变域,是char 类型
varirecord.C := 'a';
writeln(variRecord.c); // 用 with 语句来初始化可变记录的域,这个与
with variRecord do
begin
nullStr :='This is null string field.';
intField := ;
d := 13.0 ;
i := ;
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_ ) then
begin
writeln('b is in charSet + charSet_1');
end; // 集合的交集
if 'd' in (charSet * charSet_ ) 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.
欢迎转载,转载请注明来源。
Delphi_04_Delphi_Object_Pascal_基本语法_02的更多相关文章
- 数往知来 SQL SERVER 基本语法<七>
sqlserver学习_01 启动数据库 开始->cmd->进入控制台 sqlcmd->-S .\sqlexpress 1> 如果出现表示数据库"sqle ...
- Java基础知识二次学习-- 第二章 基础语法与递归补充
第二章 基础语法与递归补充 时间:2017年4月24日10:39:18 章节:02章_01节,02章_02节 视频长度:49:21 + 15:45 内容:标识符,关键字与数据类型 心得:由字母,下 ...
- C#_02.14_基础五_.NET类
C#_02.14_基础五_.NET类 一.类实例: 我们前面说过类是一个模板,我们通过类创建一个又一个的实例,通常情况下类当中的变量是每一个实例都各有一份的,互相不影响,而静态字段是除外的,静态字段是 ...
- 我的MYSQL学习心得(一) 简单语法
我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- Swift与C#的基础语法比较
背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...
- 探索C#之6.0语法糖剖析
阅读目录: 自动属性默认初始化 自动只读属性默认初始化 表达式为主体的函数 表达式为主体的属性(赋值) 静态类导入 Null条件运算符 字符串格式化 索引初始化 异常过滤器when catch和fin ...
- [C#] 回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性
回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性 序 目前最新的版本是 C# 7.0,VS 的最新版本为 Visual Studio 2017 RC,两者都尚未进入正式阶段.C# 6.0 ...
- Velocity初探小结--velocity使用语法详解
做java开发的朋友一般对JSP是比较熟悉的,大部分人第一次学习开发View层都是使用JSP来进行页面渲染的,我们都知道JSP是可以嵌入java代码的,在远古时代,java程序员甚至在一个jsp页面上 ...
- node.js学习(二)--Node.js控制台(REPL)&&Node.js的基础和语法
1.1.2 Node.js控制台(REPL) Node.js也有自己的虚拟的运行环境:REPL. 我们可以使用它来执行任何的Node.js或者javascript代码.还可以引入模块和使用文件系统. ...
随机推荐
- 通过AngularJS实现前端与后台的数据对接(一)——预备工作篇
最近,笔者在做一个项目:使用AngularJS,从而实现前端与后台的数据对接.笔者这是第一次做前端与后台的数据对接的工作,因此遇到了许多问题.笔者在这些问题中,总结了一些如何实现前端与后台的数据对接的 ...
- javascript运动系列第一篇——匀速运动
× 目录 [1]简单运动 [2]定时器管理 [3]分享到效果[4]移入移出[5]运动函数[6]透明度[7]多值[8]多物体[9]回调[10]函数完善[11]最终函数 前面的话 除了拖拽以外,运动也是j ...
- 屌丝giser成长记-大学篇
作为一名屌丝giser的我,刚接触gis专业是2007年的大一,好悲催,当时gis这个专业是被调剂的,我压根都不知道gis为何物,那时候gis冷门的一逼,报名这个专业的寥寥无几.记得那时候得知被调剂到 ...
- ios 获取或修改网页上的内容
UIWebView是iOS最常用的SDK之一,它有一个stringByEvaluatingJavaScriptFromString方法可以将javascript嵌 入页面中,通过这个方法我们可 ...
- T-SQL 拆分使用指定分隔符的字符串(split string)
比如有一个表,我们需要些一个语句像SELECT OtherID, SplitData WHERE SomeID = 'abcdef-.......' , 然后就能返回分割成单独的行. 原表: | So ...
- InnoDB:Lock & Transaction
InnoDB 是一个支持事务的Engine,要保证事务ACID,必然会用到Lock.就像在Java编程一下,要保证数据的线程安全性,必然会用到Lock.了解Lock,Transaction可以帮助sq ...
- 用ffmpeg快速剪切和合并视频
如果直接找视频剪切和合并视频的软件,通常出来的都是大的视频编辑软件或者是有图形界面的剪切软件,大型一点的功能太多安装麻烦,小型一点的功能可能不齐全. 只是简单的剪切或者一下合并一下,还是ffmpeg这 ...
- 我的MYSQL学习心得(三) 查看字段长度
我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- Jexus Web Server 完全傻瓜化图文配置教程(基于Ubuntu 12.04.3 64位)[内含Hyper-v 2012虚拟机镜像下载地址]
1. 前言 近日有感许多新朋友想尝试使用Jexus,不过绝大多数都困惑徘徊在Linux如何安装啊,如何编译Mono啊,如何配置Jexus啊...等等基础问题,于是昨日向宇内流云兄提议,不如搞几个配置好 ...
- .NET Web的身份认证
百度一下”asp.net身份认证“,你会得到很多相关的资料,这些资料通常上来就会介绍诸如”Form认证“”Windows认证“等内容,而没有给出一个完整的流程.初学者对此往往一头雾水,我也曾经被坑过很 ...