cbuilder6编程(宝典)

  • 格式:pdf
  • 大小:237.06 KB
  • 文档页数:5

第2 章 语法摘述 2.1 抽象数据类型 CBuilder 中以类的方式提供了几个非常有用

的抽象数据类型。包括TList 链表类、 AnsiString 类、Set 集合类、DynamicArray 动态数组类和TStream 流类。在程序编 写过程中这几个类的使用在很多地方都起到很重要的作用。 2.1.1 TList 类 TList 实现了线形链表

可以用来存储任意类的对象包括用户自定义的类。虽然它是链 表但是它实际上

是一个存放指针的数组可以通过其 Items 属性象访问一个数组那样实现 对TList

对象的每一个元素的访问。TList 类提供了足够的属性和方法实现对链表的各种操

作 如全套插入、删除、查找、排序以及提供链表元素数目Count 属性等属性。 1TList 类的主要属性有 Capacity 属性 __property int Capacity

readFCapacity writeSetCapacity nodefault 设定 Capacity 指定 TList 对象中的元素

个数并为新增加的元素分配内存。如果没有足 够的内存为新元素分配空间将会

抛出一个EOutOfMemory 异常。 这里需要注意Capacity 属性和Count 属性的不同。Count 属性是TList 对象中Items 属性 的元素个数而Capacity 是TList 类可以包含的元素个数由分配了多少的内存决定Capacity 总是大于或者等于Count。 将

一个元素插入链表其Capacity 属性会自动随之更改。如果需要多次的执行添加操

作 那么可以先设置Capacity这样就能避免每次Add 方法都要重新指定内存

从而提高程序的 执行效率如下面的代码 List-gtClear List-gtCapacity Count for int I 0 I lt Count I List-gtAdd... 代码中在循环执行 Add 之前先指定了 Capacity 属性这样就避免了循环中Add 的分 配内存的操作提高了程序的效率而且

也避免了分配内存时的异常。 Count 属性 __property int Count readFCount writeSetCount nodefault 标志TList 对象中的Items 数组的个数也即Items 数组的

大小。对Count 属性的更改可 以实现对数组末尾处元素的添加和删除。需要注意的

是Count 属性并不一定是 TList 对象中 元素的个数它也包含 Items 数组中的空指针的数目。如果要删除数组中的空指针可以使 用TList 的Pack 方法。 Items 属

性 __property void Itemsint Index readGet writePut 通过Items 属性可以象数组那

样访问链表中的元素。 List 属性 typedef void TPointerList134217727 typedef TPointerList PPointerList __property PPointerList List readFList 获取直接进入列表

中元素数组的指针。 2TList 类的主要方法有 Add 方法 int __fastcall Addvoid Item Add 方法在 TList 对象的数组末尾添加一个元素返回值为添加的

元素的数组下标。如 果添加后Count 大于Capacity那么将会重新为之分配内存。

需要注意的是不管Items 数组 中有没有NULL 元素Add 方法都只是在数组的

末尾添加元素。 Clear 方法 virtual void __fastcall Clearvoid 清除链表中的所有元

素。此方法执行之后将释放所有内存置Capacity 为0。 Delete 方法 void __fastcall Deleteint Index 删除数组中下标为 Index 的元素。Delete 方法并不释放元

素占用的内存也即不改变 Capacity 的值。 Exchange 方法 void __fastcall Exchangeint Index1 int Index2 交换链表中两个元素的位置。 Expand 方法 TList

__fastcall Expandvoid Expand 方法为 TList 链表增加内存空间。如果 Count 属性还

没有达到Capacity则此方 法不做任何操作如果 Capacity 等于 Count则按照下面规则增加空间Capacitygt8则将 Capacity 增加 16Capacitygt4 且Capacitylt9将Capacity 增加 8Capacitylt4则将Capacity 增加4。 IndexOf 方法

int __fastcall IndexOfvoid Item 查找列表中指定元素的数组下标。 Insert 方法 void __fastcall Insertint Index void Item 在列表中的指定位置添加元素。 Move 方法

void __fastcall Moveint CurIndex int NewIndex 将 CurIndex 位置的元素移动到

NewIndex 位置此操作将覆盖原来NewIndex 位置的元 素。 Pack 方法 void __fastcall Packvoid 删除Items 列表中所有指针值为NULL 的元素。此操作并不释放

内存即只会改变Count 属性的值不会改变Capacity 属性。 Remove 方法 int __fastcall Removevoid Item 根据元素的值删除列表中的指定元素。返回值为元素

删除之前的位置。 Add 方法和Remove 方法的参数都是列表的元素对象其示例

如下 void __fastcall TForm1::Button1ClickTObject Sender TList pList new TList AnsiString TheObject quotThis is an object.quot try pList-gtAddTheObject // 添加

AnsiString 实例到pList 列表 MessageDlgquot列表中有quot IntToStrpList-gtCount

quot个元素quot mtInformation TMsgDlgButtons ltlt mbOK 0 pList-gtRemoveTheObject

MessageDlgquot列表中有 quot IntToStrpList-gtCount quot个元素quot

mtInformation TMsgDlgButtons ltlt mbOK 0 __finally delete pList Sort 方法 typedef int __fastcall TListSortComparevoid Item1 void Item2 void __fastcall

SortTListSortCompare Compare 通过自定义的比较函数Compare 来对列表中的元素

进行排序。 如下面代码 int __fastcall CompareNamesvoid Item1 void Item2 return CompareTextTComponent Item1-gtName TComponent Item2-gtName void __fastcall

TForm1::Button1ClickTObject Sender List1-gtSortCompareText 2.1.2 AnsiString 类

AnsiString 是CBuilder 中仿照Object Pascal 语言中的长字符串类型设计的一个字符串 类在CBuilder 中几乎所有用到字符串的地方都无一例外的使用AnsiString

类型。比较 C中提供的字符串类型AnsiString 提供了更多实用、方便的方法。本

质上AnsiString 仍 然采用C/C的字符串结构以’0’作为字符串的结尾标志只

是在字符串的前面添加了几个 字节的信息头。 AnsiString 定义了一系列操作符

包括赋值、比较等操作具体如下 赋值“” 字符串连接“”、“” 字符串比较“”、“gt”、“lt”、“lt”、“gt”、“” 访问“”用此操作符可以象数组一样访问字符串

中的字符不同的是在AnsiString 中第一个字符的下标为1而不是0。 AnsiString 类的常用的方法有 c_str 方法 char __fastcall c_str const 返回与

AnsiString 相同字符内容的 C/C标准字符串指针即以’0’NULL作为结尾标 志的

字符串。如果 AnsiString 字符串还没有赋值那么此方法将返回一个空字符串””。此方 法主要用于字符串的读取如果要修改字符串应该使用其Insert、Delete 方

法或者操作 符。 Delete 方法 AnsiStringamp __fastcall Deleteint index int count 在

字符串中删除从index 开始的count 个字符。如果index 大于字符串的长度则此方

法 不删除任何字符如果count 大于从index 开始的剩余字符数目则此方法删除

从index 开始 的所有剩余字符如果count 小于0此方法不删除任何字符。 FormatFloat static AnsiString __fastcall FormatFloatconst AnsiStringamp formatconst

long doubleamp value 将value 用format 指定的格式转换为字符串形式。典型的格式

如下 表 2-1 FormatFloat 常用格式示例 Format string 1234 -1234 0.5 0 1234 -1234 0.5 0 0 1234 -1234 1 0 0.00 1234.00 -1234.00 0.50 0.00 . 1234 -1234 .5 0.00 1234.00 -1234.00 0.50 0.00 0.000.00 1234.00 1234.00 0.50 0.00 0.00Zero 1234.00 -1234.00 0.50 Zero 0.000E00 1.234E03 -1.234E03 5.000E-01 0.000E00 .E-0 1.234E3 -1.234E3 5E-1 0E0 Insert 方法 AnsiStringamp __fastcall Insertconst AnsiStringamp str int index 在

AnsiString 字符串的index 位置插入字符串str。 IntToHex 方法 static AnsiString