




已阅读5页,还剩77页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Delphi数据库管理信息系统 第五章ObjectPascal基础知识 本章重点 ObjectPascal的基础语言 包括数据类型 常量 变量 操作符 运算符和表达式 过程与函数以及常用的函数 Delphi的编程规范 包括程序结构 面向对象程序设计 ObjectPascal是一种面向对象的高级程序设计语言 是Delphi的语法基础 它的语法具备严格的结构化特点 可读性好 容易编写 具有丰富的数据类型 高效的程序代码 强大的调试能力 因而ObjectPascal往往被用来描述各种算法与数据结构 学习ObjectPascal有益于培养良好的程序设计风格和习惯 ObjectPascal同时支持面向对象的程序设计 提供面向对象的应用框架和库 提供开发ObjectWindows等 5 1ObjectPascal的语言基础 5 1 1数据类型 简单数据类型和较复杂的数据类型 1 简单的数据类型 整型 实型 布尔型和字符型 系统还允许用户自己定义一些较为复杂的数据类型 例如 子界类型 枚举类型 指针类型 记录类型以及文件类型等 以下简单介绍下这些类型 子界类型 为数据定义一个连续取值范围的结构数据类型 为了表达连续的取值范围 所使用的方法是 type 定义子界类型及变量子界类型的方法 例如 typeTMonth 1 12 TScore A F varMonth TMonth Score TScore 枚举类型 如果有一种变量能列举出它所有可能的取值 那么就将这样的变量定义为枚举类型的变量 type typeTWorkDay Mon Tue Wed Thu Fri varWeekDay TWorkDay 集合类型 用户定义的一个结构数据类型 可将一些同样类型的数据放在一起 看作为一个集合 集合必须是有限集合 必须是用Setof来引导的一个子界类型数据 例如 Setof1 7 通常用 将集合中所有的数据组合起来以表示一个集合的子集合 这正是集合类型变量的取值 有了集合类型 就可以对集合进行操作运算 交集 并集和差集等 typeTWeekDay Setof1 7 varWeekDay TWeekDay baginWeekDay 1 3 5 6 end 指针类型 Pascal允许建立动态数据结构 它采用指针类型数据 指针类型变量的引入大大增强了程序的灵活性 一个指针类型变量用于保存一个内存地址 由于该内存地址指向的是一个动态分配的变量 所以 在定义指针类型数据时 必须说明它所指向变量的类型 数组类型 数组类型可以分为一维数组 二维数组以及多维数组 每一维度的下标指明了该维中的元素数目 整个数组的元素个数为 typeTArrayOne Array 1 9 ofInteger TArrayTwo Array 1 5 1 3 ofReal 5 2 编写ObjectPascal程序代码 在编写自己的ObjectPascal程序时 要注意程序的可读性 Pascal语言是英式结构语言 在程序中选择合适的缩排 大小写风格 并在需要时将程序代码分行 会使得程序代码能够很容易地被自己和他人读懂 给程序及时地加上注释是良好的编程习惯 Delphi的注释需要加注在 或 之间 之后 编辑器会把它们处理成为空白 Delphi保留了BorlandPascal编辑器的风格 关键字采用黑体字 被注释的部分会变暗 这使得编程风格良好 易读易写 注意 注释内容 正确 注释内容 正确 注释内容 错误 注释内容 错误 5 2 1编写赋值语句在事件处理过程中 最常用到的工作就是把一个新值赋给一个属性或变量 在设计用户界面时 可以使用ObjectInspector ObjectInspector 来改变其属性 但有时需要在程序执行时改变属性的值 而且有些属性只能在执行时改变 这些属性在Delphi的在线帮助的 Proprety 主题中被标为执行期属性 进行这种改变 就必须使用赋值语句 procedureTForm1 Button1Click Sender TObject beginEdit1 Color clRed end 在语句中 部件的名称在属性前 中间用 表示属性的所属关系 这样就准确地指定了要将clRed值赋给哪一部件的哪一属性 赋值号为 不论给属性还是给变量赋值 都是将右边的值赋给左边的属性或变量 5 2 2标识符的说明与使用标识符是Delphi应用程序中一些量的名称 这些量包括变量 var 常量 const 类型 type 过程 procedure 方法 Method 及其他 ObjectPascal在应用标识符时 必须首先说明它们 ObjectPascal是强类型语言 它的编译器可以检查确保赋给变量或属性的值是正确的类型 以便于您改正错误 因为ObjectPascal是编译语言 所以Delphi的执行速度要比使用解释语言快得多 在使用标识符前说明它们 可以减少程序错误并增加代码的效率 1变量变量是程序代码中代表一个内存地址的标识符 而此地址的内存内容在程序代码执行时可以被改变 在使用变量前必须对它进行说明 即对它进行命名 并说明它的类型 在所有变量说明以前加上保留字var 变量说明左边是变量的名称 右边则是该变量的类型 中间用 隔开 变量声明格式 var 变量赋值格式 varValue Sum Integer Line String Value 1 Line HowAreYou procedureTForm1 addClick Sender TObject varX Y Integer beginX 100 Y 20 Edit1 Text IntToStr X Y end 2常量常量在说明时就被赋予了一个值 在程序执行过程中是不可改变的 常量赋值格式 下面的例子说明了三个常量 constPi 3 14159 Answer 342 ProductName string Delphi 象变量一样 常量也有类型 不同的是 常量假设其类型就是常量说明中其所代表的值的类型 上面三个常量的类型分别是real型 整形 字符串型 常量用 表示两边的值是相等的 5 3操作符 运算符和表达式 5 3 1操作符 普通字符 ObjectPascal保留字 关键字和标识符 保留字是Delphi编译器预定义的 Delphi中的保留字在语言中有着特殊的含义 在程序设计时一定要注意不能随意修改或引用保留字 所有定义的名称都不可以与保留字重名 所有的保留字都是小写的 Delphi中一共有65个保留字 保留字 and array as asm begin case class const constructor destructor dispinterface div do downto else end except exports file finalization finally for function goto if implementation in inherited initialization inline interface is label library mod nil not object of or out packed procedure program property raise record repeat resou rcest ring set shl shr string then threadvar to try type unit until uses var while with xor private protected public published automated 标识符必须由一个字母或下划线开始 后面是具有任意长度的字符串 不包括空格 变量类型 Integer Rear Single Char过程 Rear Write Reset Eof函数 Random Upper Date 5 3 2运算符 运算符是在程序中对各种数据类型常量和变量进行运算的符号 运算符分为单目运算符和双目运算符 其中 not和 为单目 其余的为双目运算符 根据运算符给定的操作数数据类型 可以将其分为 1 算术运算符2 逻辑运算符3 位运算符4 字符串运算符5 指针运算符6 类型运算符7 运算符8 集合运算符9 关系运算符 单目运算符 取变量或函数的地址 返回一个指针 not逻辑取反或按位取反乘除及按位运算符 相乘或集合交集 浮点相除div整数相除取整mod取模 整数相除的余数 as程序运行阶段类型转换 RTTI运算符 and逻辑或按位求和shl按位左移shr按位右移 加减运算符 相加 集合并集 字符串连接或指针增加一个偏移量 相减 集合差集或指针减少一个偏移量or逻辑或按位或运算xor逻辑或按位异或运算关系及比较运算符 最低优先级 判断是否相等判断是否不相等判断是否大于 判断是否大于或等于 或是否是一个集合的父集in判断是否是集合成员is判断对象是否类型兼容 又一个RTTI运算符 5 4过程与函数过程与函数是程序中执行特定工作的模块化部分 Delphi的运行库包含许多过程与函数以供您的应用程序调用 您不必了解过程与函数的逻辑 但要知道过程与函数的用途 在对象中说明的过程和函数称为方法 Method 所有的事件处理过程都是过程 以保留字procedure开头 每一个事件处理过程只包含了当这一事件发生时需要执行的程序代码 在事件处理过程中使用Delphi已经存在的过程与函数 只需在程序代码中调用它们即可 过程与函数的区别 函数返回一个函数值 需要运算出一个结果 可以通过函数名变量或Result变量 函数体自动定义的变量 来返回结果值 过程则能完成一系列各种操作 没有返回值 由于存在是否有返回值这一区别 因此其调用形式也不相同 函数的调用同变量的方法相同 用于表达式之中 而过程则可以单独调用 1 过程过程由过程头部和过程体组成Procedure函数名 形式参数序列 过程头部 begin语句1 过程体语句nend 2 函数函数指明函数名 函数形参及类型 函数返回值的数据类型 函数体中至少要有一条语句对函数名赋值 函数的返回值可以赋给函数名 也可以赋给Result变量 函数定义形式如下 function函数名 形式参数序列 参数类型 函数返回类型 begin语句1 函数体语句n end 例如 functionStar x integer integer beginStar x x end 3 形参和实参参数分为4种 值参数 变量参数 常量参数和输出参数 1 值参数functionStar y integer integer beginy 3 Star y end 2 变量参数 如果需要在过程或函数调用后返回形参的值时 应采用变量参数 functionStar vary integer integer beginy 3 Star y end 3 常量参数 functionStar Consty integer integer beginStar y end 常量 Const 参数y 类似于变量参数 在内存中有引用关系存在 但y在函数体内不允许被修改 4 输出参数 functionStar Outy integer integer beginStar y end 4 变量的作用域 1 全局变量及其作用域全局变量是指在程序开头的说明部分定义和说明的量 它的作用域通常作用于整个程序 只是在全局变量和局部变量同名时 全局变量的作用域不包含同名局部变量的作用域 2 局部变量及其作用域凡是在过程或函数内部使用的变量 必须在其中加入说明 这种在过程或函数内部说明的变量称为局部变量 局部变量的作用域只是其所在的子程序范围内 5 5常用函数 Copy返回一个字符串的子串copy abcde 2 4 Pi返回圆周率Pi Date返回当前日期Now返回当前时间和日期Datetimetostr将日期时间格式转换为字符串Datetimetostr now Datetostr将日期格式转换为字符串Datetostr now Time返回当前时间Time Pos查找字符串中某一子串位置Strcat将一字符串附加到另一字符串尾并返回合并的字符串Strcopy将一个字符串复制到另一个字符串中 5 5常用函数 Int返回参数的整数部分Trim从给定的字符串中删除前导和尾部的空格及控制字符Eof对有类型或无类型文件测试是否到文件尾部Bof对有类型或无类型文件测试是否到文件首Lowercase将给定的字符串变为小写Uppercase将给定的字符串变为大写Length返回字符串的动态长度 5 6程序结构 ObjectPascal的基本程序结构主要包括 顺序结构 选择结构 循环结构 5 6 1跳转语句 ObjectPascal的跳转语句有if和case两个 if语句if语句会计算一个表达式 并根据计算结果决定程序流程 在之前的例程中 根据ColorDialog Execute的返回值 决定窗体的背景颜色 if保留字后跟随一个生成Boolean值True或False的表达式 一般用 作为关系运算符 比较产生一个布尔型值 当表达式为True时 执行then后的语句 否则执行else后的代码 if语句也可以不含else部分 表达式为False时自动跳到下一行程序 if语句可以嵌套 当使用复合语句表达时 复合语句前后需加上begin end else保留字前不能加 而且 编译器会将else语句视为属于最靠近的if语句 必要时 须使用begin end保留字来强迫else部分属于某一级的if语句 If 条件 then 执行语句1 else 执行语句2 注意 以上else后面可以没有内容每条If语句的最后必须用分号结尾注意如果在一条if语句中有多个条件 必须用括号把这几个条件分别括起来如果执行语句包括两条及两条以上的语句 那么这些语句必须用begin和end括起来 case语句case语句适用于被判断的变量或属性是整形 字符型 枚举型或子界型时 LongInt除外 用case语句进行逻辑跳转比编写复杂的if语句容易阅读 而且程序代码整形较快 建立如下的事件处理过程 procedureTForm1 Button1Click Sender TObject varNumber Integer beginNumber StrToInt Edit1 Text caseNumberof1 3 5 7 9 Label2 Caption 奇数 0 2 4 6 8 Label2 Caption 偶数 10 100 beginLabel2 Caption 在10到100之间 Form1 Color clBlue end elseLabel2 Caption 大于100或为负数 end end 5 6 2循环语句 ObjectPascal的循环语句有三种 repeat while和for语句 repeat语句repeat语句会重复执行一行或一段语句直到某一状态为真 语句以repeat开始 以until结束 其后跟随被判断的布尔表达式 i 0 repeati i 1 Writen i untili 10 while语句while语句和repeat语句的不同之处是 它的布尔表达式在循环的开头进行判断 while保留字后面必须跟一个布尔表达式 如果该表达式的结果为真 循环被执行 否则会退出循环 执行while语句后面的程序 下面的例程达到和上面的repeat例程达到同样的效果 i 0 whilei 10dobegini i 1 writeln i end for语句for语句的程序代码会执行一定的次数 它需要一个循环变量来控制循环次数 您需要说明一个变量 它的类型可以是整形 布尔型 字符型 枚举型或子界型 下面的程序段会显示1到5的数字 i为控制变量 vari integer fori 1to5dowriteln i 5 7Delphi编程规范 5 7 1源程序书写规范5 7 1 1通用源代码格式规范 1 缩进通常每级见都应有2个空格 2 begin end语句begin和end都是单独一行 但当begin为else语句的一部分时 可以出现elsebegin的形式 否则对应的end语句与begin语句的缩进量相同 3 注释通常实用 类型作为块注释 类型的块注释仅用于临时注释掉暂时不使用的代码 类型作为行注释 5 7 1 2ObjectPascal语句规范 1 括号通常在括号两边不应该有空格 同时不要在语句中包含多余的括号 2 保留字和关键字 3 过程和函数1 格式过程名应当大写字母开头 且大小写交错以增加可读性 2 形参只要可能 同一类型的形参应当归并在一起 并且顺序要考虑寄存器调用规则 按使用频率依次从左到右排 通常兼顾范围大的参数应当放在范围小的参数之前 4 变量1 局部变量2 全局变量 5 类型1 大小写规则Win32API类型常常全部大写 并且遵循Windows pas或其他API单元中关于特定类型名的规则 对于变量名 第一个字母应该大写 其他字母则大小写交错 VarMyString String 保留字WindowsHandle Hwnd Win32API类型 2 浮点型不鼓励使用Real类型 通常使用Double类型 当需要范围更大时 可使用Extend 6 语句1 if语句在if then else语句中 最可能执行的情况放在then子句中 为了避免出现许多if语句 可以使用case语句代替 而且如果多于5级 不要使用if语句 2 case语句case语句中每种情况的常量应当按数字或字母的顺序排列 每种情况的动作语句应当简短且通常不超过4 5行代码 case语句的else子句只用于默认情况或错误检测 3 while repeat语句建议不要使用Exit过程来退出循环 应当使用循环条件退出 4 for如果循环的次数是确定的 尽量用for语句代替while语句 7 结构化异常处理1 概述异常处理主要用于纠正错误和保护资源 也就是说 凡是分配资源的地方 都必须使用try finally来保证资源得到释放 2 运用SomeClass1 TSomeClass Create trySomeClass2 TSomeClass Create try dosomecode finallySomeClass2 Free end finallySomeClass1 Free end 5 7 2命名规范5 7 2 1过程 Procedure 与函数 Function 1 命名进行一个动作的过程最好在名称前加上表示动作的动词为前缀 设置输入参数值的过程名应当以Set为前缀ProcedureSetUserName 获取数值的过程名应当以Get为其前缀 2 形参所有形参的名称都应当表达出它的用途 形参名称最好以字母a为前缀 当参数名与类型的特性或字段同名 就没必要了 3 命名冲突当两个单元中含有相同名称的过程时 如果调用该过程 则实际调用的是uses子句中的稍后出现的那个单元中的过程 为避免 可在方法名前加上想要的单元名 5 8程序模块程序模块在ObjectPascal中是很重要的概念 它们提供了应用程序的结构 决定了变量 属性值的范围及程序执行的过程 它由两个部分组成 可选择的说明部分和语句部分 如果有说明部分 则必在语句部分之前 说明部分包括变量说明 常量说明 类型说明 标号说明 程序 函数 方法的说明等 语句部分叙述了可执行的逻辑行动 在Delphi中 最常见的程序模块便是事件处理过程中的程序模块 下面的事件处理过程是含有变量说明部分的程序模块 procedureTForm Button1Click SenderTobject var 程序模块的说明部分 Name string begin 程序模块的语句部分 Name Edit1 Text Edit2 Text WelcometoDelphi Name end 程序模块结束 库单元也是程序模块 库单元的interface部分含有库函数 类型 私有 公有域的说明 也可以含有常量 变量的说明 这一部分可以作为程序模块的说明部分 在库单元的implementation部分中通常含有各种事件处理过程 它们可以视为模块的语句部分 是事件处理模块 库单元模块结束于库单元结束的end 处 程序模块中可以包含其他的程序模块 上文库单元模块中含有事件处理模块 而库单元模块实际是在工程程序模块中 所有的Delphi应用程序都有相同的基本结构 当程序逐渐复杂时 在程序中加入模块即可 例如在库单元模块中加入事件处理模块 向工程中加入库单元模块等 模块化编程使得程序结构良好 并且对数据具有保护作用 5 8 1关于作用范围 1标识符的作用范围一个变量 常量 方法 类型或其他标识符的范围定义了这个标识符的活动区域 对于说明这个标识符的最小程序模块而言 此标识符是局部的 当您的应用程序在说明一个标识符的程序模块外执行时 该标识符就不在此范围内 这意味着此时执行的程序无法访问这个标识符 只有当程序再度进入说明这个标识符的程序模块时 才可以访问它 下面的示意图表示一个含有两个库单元的工程 每个库单元中又各有三个过程或事件处理过程 2访问其他程序模块中的说明您可以在当前的程序模块中访问其他程序模块中的说明 例如您在库单元中编写一个事件处理过程来计算利率 则其他的库单元可以访问这个事件处理过程 要访问不在当前库单元中的说明 应在这个说明之前加上其他应用程序的名称和一个点号 例如 在库单元Unit1中有事件处理过程CalculateInterest过程 现在您想在库单元Unit2中调用这一过程 则可以在Unit2的uses子句中加入Unit1 并使用下面的说明 Unit1 CalculateInterest PrincipalInterestRate Double 应用程序的代码不能在一个模块外访问它说明的变量 事实上 当程序执行跳出一个模块后 这些变量就不存在于内存中了 这一点对于任何标识符都是一样的 不管事件处理过程 过程 函数还是方法 都具有这一性质 这样的标识符称为局部变量 3按照作用范围说明标识符您可以在应用程序的不同地方说明一个标识符 而只需保证它们的有效范围不同即可 编译器会自动访问最靠近当前范围的标识符 库单元的全局变量一般可以说明在保留字implementation后面 例如 下面的例程实现将两个编辑框中的整数相加 显示在第三个编辑框中 用到了一个整形的全局变量Count implememntationvarCount Integer procedureTForm1 AddClick Sender TObject varFirstNumber SecondNumber Integer beginCount Count 1 Counter Text IntToStr Count FirstNumber StrToInt Edit1 Text SecondNumber StrToInt Edit2 Text Edit3 Text IntToStr FirstNumber SecondNumber end 为了实现每按动一次按钮Count增加一次 必须对全程变量Count进行初始化处理 在程序库单元的结尾处 最后一个end 保留字之前 加入保留字initialization和初始化Count的代码 initializationCount 0 编写一个过程或函数在开发Delphi应用程序时 所需的大部分代码都编写在事件处理过程中 但有时仍然需要编写不是事件处理过程的函数或过程 例如 可以把在多个事件处理过程中用得到语句编写成过程 然后任何事件处理过程 过程 函数都可以象调用已经存在的过程或函数一样直接调用它 好处是您只需编写一次代码 而且程序代码会比较清楚 一个自行编写的函数例程在上文两个数相加的程序中 如果编辑框中无值 则会使得程序出错中断 为避免这种情况 编写下面的函数 检查编辑框中是否有值 如无值 则提醒用户输入 functionNoValue AnEditBox TEdit Boolean beginifAnEditBox Text thenbeginAnEditBox Color clRed AnEditBox Text 请输入整数值 Result True endelsebeginAnEditBox Color clWindow Result False end end NoValue函数会检查编辑框是否为空 如果是 编辑框颜色变红 并提醒用户输入一个整数 然后函数返回真值 Result保留字在Delphi中用来专指函数返回值 在上文的例程中加入NoValue函数 procedureTForm1 AddClick Sender TObject varFirstNumber SecondNumber Integer beginifNoValue Edit1 orNoValue Edit2 thenexit Count Count 1 Counter Text IntToStr Count FirstNumber StrToInt Edit1 Text SecondNumber StrToInt Edit2 Text Edit3 Text IntToStr FirstNumber SecondNumber end 如果其中的任何一个返回真值 则表示有编辑框空 会执行exit过程 使得当前的程序模块停止执行 并使得编辑框出现输值提示 当新值被输入后 再执行程序时 红色提示被隐去 恢复正常的计算状态 5 8 2过程和函数的标题每一个过程或函数都以标题开始 其中包括过程或函数的名称和它使用的参数 过程以保留字procedure开始 函数以保留字function开始 参数位于括号里面 每一个参数以分号分隔 例如 procedurevalidateDate Day Integer month Integer Year Integer 您也可以将相同类型的参数组合在一起 则上述过程头写作 procedureValidateDate Day Month Year Integer 函数在标题中还多了一项 返回值的类型 下面是一个返回值为Double型的函数标题 functionCalculateInterest principal InterestRate Double Double 5 8 3函数和过程中的类型说明一个过程或函数程序模块也含有说明部分和语句部分 说明部分可以包括类型说明 变量说明 常量说明等 除了ObjectPascal语言中已经定义的类型之外 Delphi的应用程序还可以建立新的数据类型 类型说明部分有保留字type开始 下面是一些类型的说明 typeTcount Integer TPrimaryColor Red Yellow Blue TTestIndex 1 100 TTextValue 99 99 TTestList array TTestIndex ofTTestValue TCharVal Ord A Ord Z Today Monday Tuesday Wednesday Thursday Friday Saturday Sunday 在类型标识符后面 用 号定义了新的类型 类型界定了变量的取值范围 例如 TCount类型的变量必须是整形值 一个TPrimaryColor类型的变量只能是red yellow或blue等等 每一个类型的名称都是由字母T开始 这并非必须的 但它是Delphi的惯例 在区别类型名和标识符时非常有用 类型说明可以是局部的 也可以是全局的 如果您把它放在implementation后面 则表明对于库单元来讲 它是全局的 所有的事件处理过程和其他的过程 函数都可以调用它 如果类型是在过程中被说明的 则是局部的 离开这一过程 该类型将失效 一般来讲 在过程和函数中 任何类型说明都在变量说明之前 而任何变量说明都在常量之前 但是 只要遵从说明必须在过程与函数的标题之后 而且在程序代码之前 即是有效的 5 8 4过程和函数的语句部分过程或函数的语句部分由begin开始 end结束 函数需要一个返回值 可以将返回值赋给函数名称 也可以将返回值赋给Result变量 下面的例程将返回值赋给函数名称 functionCalculateInterest Principal InterestRate Double Double beginCalculateInterest Principal InterestRate end 将返回值赋给Result变量也是可以的 则上面的程序改为 Result Principal InterestRate 下面是这个函数的调用方法 InterestEarned CalculateInterest 2000 0 012 在Implementation后面的过程和函数 可以且只能被此库单元的事件处理过程使用 要让过程和函数可以被其他的程序库单元使用 则需要将过程或函数的标题部分放在库单元中的interface部分 而把含标题的整个过程或函数放在库单元的inplementation部分 并在要访问这个过程或函数的库单元的uses子句中加入说明这个过程或函数的库单元名称 5 8 5函数的递归调用在ObjectPascal中 过程或函数必须先说明再调用 上文的NoValue函数必须在使用它的事件处理过程之前说明和执行 否则程序会报告一个未知标识符的错误 以上规则在递归调用时是例外情况 所谓递归调用 是指函数A调用函数B 而函数B又调用函数A的情况 在递归调用中 函数要进行前置 即在函数或过程的标题部分最后加上保留字forword 一个递归调用的典型例子 implementationvaralpha Integer procedureTest2 varA Integer forword Test2被说明为前置过程 procedureTest1 varA Integer beginA A 1 ifA 0thentest2 A 经前置说明 调用未执行的过程Test2 writeln A end procedureTest2 varA Integer 经前置说明的Test2的执行部分 beginA Adiv2 ifA 0rhentest1 A 在Test2中调用已执行的过程Test1 end procedureTForm1 Button1Click Sender TObject beginAlpha 15 给Alpha赋初值 Test1 Alpha 第一次调用Test1 递归开始 end 按钮的OnClick事件处理过程给Alpha赋初值 并实现先减1再除2的循环递归调用 直到Alpha小于0为止 5 8 6过程和函数的参数当程序代码在调用一个过程或函数时 通常用参数传递数据到被调用的过程或函数中 最常用的参数有数值参数 变量参数和常量参数三种 由被调用过程或函数定义的参数为形参 而由调用过程或函数指明的参数叫实参 在NoValue函数中 说明函数体中的AnEditBox是形参 而调用时在ifNoValue Edit1 中 Edit1是实参 数值参数在运行过程中只改变其形参的值 不改变其实参的值 即参数的值不能传递到过程的外面 试看下面的例程 procedureCalculate CalNo Integer beginCalNo CalNo 10 end 用以下例程调用Calculate函数 Number StrToInt Edit1 Text Calculate Number Edit2 Text IntToStr Number Number接受由编辑框1输入的数值 经Calculate过程运算 它是一个数值型实参 在进入Calculate函数后 会把Number实参拷贝给形参CalNo 在过程中CalNo增大十倍 但并未传递出来 因此Number值并未改变 在编辑框2中显示仍然是编辑框1中的输入值 形参和实参占用不同的内存地址 在过程或函数被调用时 将实参的值复制到形参占用的内存中 因此出了过程或函数后 形参和实参的数值是不同的 但实参的值并不发生变化 如果想改变传入的参数值 就需要使用变量参数 即在被调用程序的参数表中的形参前加上保留字var 例如 procedureCalculate varCalNo Integer 则CalNo并不在内存中占据一个位置 而是指向实参Number 当一个变参被传递时 任何对形参所作的改变会反映到实参中 这是因为两个参数指向同一个地址 将上一个例程中过程头的形参CalNo前面加上var 再以同样的程序调用它 则在第二个编辑框中会显示计算的结果 把第一个编辑框中的数值放大十倍 这时形参CalNo和实参Number的值都是Nnmber初始值的10倍 如果当过程或函数执行是要求不改变形参的值 最保险的办法是使用常量参数 在参数表的参数名称前加上保留字const可以使一个形参成为常量参数 使用常量参数代替数值参数可以保护您的参数 使您在不想改变参数值时不会意外地将新的值赋给这个参数 5 9定义新的数据类型ObjectPascal有一些系统预定义的数据类型 在1 2中已经对它们作了介绍 您可以利用这些数据类型以建立新的数据类型来满足程序的特定需要 下面简单地叙
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年舟山开放大学招聘真题
- 2024年安阳汤阴县招聘公益性岗位人员真题
- 2025贵州遵义市赤水安洁物业服务有限公司招聘临聘值班人员录用模拟试卷附答案详解(考试直接用)
- 2025年宝鸡石油机械有限责任公司春季招聘(10人)模拟试卷及答案详解(全优)
- 2025北京门头沟龙泉镇招聘乡村医生3人考前自测高频考点模拟试题附答案详解(模拟题)
- 2025年湖南衡阳市水务投资集团有限公司招聘模拟试卷及答案详解(网校专用)
- 2025年烟台海阳市卫生健康局所属事业单位公开招聘工作人员(58人)模拟试卷及参考答案详解1套
- 2025贵州贵州省福泉市引进教育系统高层次人才20人模拟试卷及答案详解参考
- 2025广西桂林市资源县中峰镇中心卫生院公开招聘编外专业技术人员2人模拟试卷及答案详解(各地真题)
- 2025北京林业大学附属实验小学教师招聘1人模拟试卷及答案详解(全优)
- (完整)马克思主义政治经济学习题及参考答案
- 大规模模型蒸馏技术
- 贝朗DIALOG+透析机水路设计概览课件
- 光电功能材料课程-13-18课件
- 施工现场污水排放方案
- 黔西市中医医院金阳院区环评报告
- 我的家乡-枣阳
- 青春期生理卫生知识讲座男生篇
- 高中期中考试家长会PPT课件 (共51张PPT)
- 全球卫生治理课件
- 实验室生物安全程序文件
评论
0/150
提交评论