• 子界类型(Subrange types)


    子界类型(Subrange types)定义了某种有序类型的一个子集,子界的有序值必须是在别的有序类型中已经定义过的。子界中有序值的索引被基类确定。

    它的形式为Low..High。这里LowHigh是同一个有序类型的常量表达式,并且LowHigh要小。

    定义一个子界类型变量,那么赋给该变量的值必须是子界定义范围内的值。

    还是举个详细的例子来说明吧。

    1、新建一个Console Application

    2、然后输入以下的代码,请仔细关注注释说明。

    program Project1;
    {$APPTYPE CONSOLE}
    uses
      SysUtils;
    const
      X = 50;
      Y = 10;
    type
      Scale = 2 * (X - Y)..(X + Y) * 2; { 常量表达式}
      //Scale = (X - Y) * 2..(X + Y) * 2;
      { 此句声明和上面的low..high范围是一样,但是注释掉的这句会导致编译错误。
      在任何类型声明中,等号(=)后面如果是左圆括号((),编译器则会认为是枚举类型,
      依次上面声明不是枚举的话就会出错,避免声明不是枚举类型时,左圆括号出现在等号后面}
      TColors = (Red, Blue, Green, Yellow, Orange, Purple, White, Black); { 枚举}
      TMyColors = Green..White; { 定义一个子界类型,范围为枚举中的Green到White}
      {TMyColors包括了Green, Yellow, Orange, Purple, White}
      TSomeNumbers = -128..127; { 数字范围的子界类型}
      TCaps = 'A'..'Z';         { 字符范围的子界类型}
    var
      SomeNum: 1..500;         { 也可直接定义子界类型变量}
      MyColors: TMyColors;
      SomeNumbers: TSomeNumbers;
      Caps: TCaps;
      Letter: Char;
    begin
      //Caps := 'e';
      { 此句将导致编译错误“Constant expression violates subrange bounds”超出范围}
    
      Letter := 'e';
      Caps := Letter;
      { 以上两句可以通过编译,但是运行下面的注释掉的代码也会出现错误,超出子界的范围}
      //Writeln('Caps在TCaps中的索引为:' + IntToStr(Ord(Caps)));
    
      MyColors := Green;
      Writeln('Green在TMyColor中的索引为:' + IntToStr(Ord(MyColors)));
      Readln;
    end.

    3、F9运行后,我们来验证结果,结果如下:

    0048

    以上代码均在Delphi7中测试通过,示例代码下载:20111224子界类型(Subrange_types).rar

  • 相关阅读:
    sh_04_第1个函数改造
    sh_03_第1个函数
    sh_02_快速体验
    sh_01_九九乘法表
    11_测试模块
    sh_12_转义字符
    sh_11_九九乘法表
    sh_10_嵌套打印小星星
    Mariadb/Redis数据库
    部署django项目
  • 原文地址:https://www.cnblogs.com/pchmonster/p/2300657.html
Copyright © 2020-2023  润新知