cbuilder6编程(宝典)
- 格式:pdf
- 大小:237.06 KB
- 文档页数:5
第2 章 语法摘述 2.1 抽象数据类型 CBuilder 中以类的方式提供了几个非常有用
的抽象数据类型。包括TList 链表类、 AnsiString 类、Set 集合类、DynamicArray 动态数组类和TStream 流类。在程序编 写过程中这几个类的使用在很多地方都起到很重要的作用。 2.1.1 TList 类 TList 实现了线形链表
可以用来存储任意类的对象包括用户自定义的类。虽然它是链 表但是它实际上
是一个存放指针的数组可以通过其 Items 属性象访问一个数组那样实现 对TList
对象的每一个元素的访问。TList 类提供了足够的属性和方法实现对链表的各种操
作 如全套插入、删除、查找、排序以及提供链表元素数目Count 属性等属性。 1TList 类的主要属性有 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 获取直接进入列表
中元素数组的指针。 2TList 类的主要方法有 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 增加 16Capacitygt4 且Capacitylt9将Capacity 增加 8Capacitylt4则将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