Borland C++ 语法摘要

摘要:
释放内存,并将Capacity清0.void__fastcallDelete;提示:不会释放内存,也不会修改Capacity。void__fastcallExchange;交换两个元素的位置。TList*__fastcallExpand;需要时扩容到2的X次方倍。void__fastcallMove;移动元素到指定位置。void__fastcallPack;删除Items列表中所有指针值为NULL的元素。示例:int__fastcallCompareNames{returnCompareText;}void__fastcallTForm1::Button1Click{List1-˃Sort;}2.1.2AnsiString类AnsiString是C++Builder中仿照ObjectPascal语言中的长字符串类型设计的一个字符串类siString类型。staticAnsiString__fastcallFormatFloat;将value用format指定的格式转换为字符串形式。示例:Formatstring1234-12340.50#,##0.001,234.00-1,234.000.500.000.000E+001.234E+03-1.234E+035.000E-010.000E+00提示:#表示此位置可空缺。staticAnsiString__fastcallLoadStr;staticAnsiString__fastcallLoadStr;从指定句柄中读取标志为ident的字符资源。staticAnsiString__fastcallStringOfChar;字符重复成串。
常用抽象数据类型:
包括TList(链表)类、AnsiString类、Set(集合)类、DynamicArray(动态数组)类和TStream(流)类。
TList类
实现了线性链表,可以存储任意类的对象。
虽然它是链表,但是它实际上是一个存放指针的数组,可以通过其Items属性象访问一个数组那样实现对List对象的每一个元素的访问。
主要属性:
Capacity容量
Count长度
需要注意的是Count属性并不一定是TList对象中元素的个数,它也包含Items数组中的空指针的数目。如果要删除数组中的空指针,可以使用List的Pack方法。
Items通过此属性可以象数组那样访问链表中的元素。
List获取直接进入列表中元素数组的指针。
主要方法:
int__fastcallAdd(void*Item);
需要注意的是,不管Items数组中有没有NULL元素,Add方法都只是在数组的末尾添加元素。
virtualvoid__fastcallClear(void);
清除链表中的所有元素。释放内存,并将Capacity清0.
void__fastcallDelete(intIndex);
提示:不会释放内存,也不会修改Capacity。
void__fastcallExchange(intIndex1,intIndex2);
交换两个元素的位置。
TList*__fastcallExpand(void);
需要时(Count=Capacity)扩容到2的X次方倍。
int__fastcallIndexOf(void*Item);
查找元素。
void__fastcallInsert(intIndex,void*Item);
插入元素到指定位置。
void__fastcallMove(intCurIndex,intNewIndex);
移动元素到指定位置。
void__fastcallPack(void);
删除Items列表中所有指针值为NULL的元素。
此操作并不释放内存,即只会改变Count。
int__fastcallRemove(void*Item);
删除指定值的元素。
返回元素先前的位置。
Add方法和Remove方法的参数都是列表的元素对象。
示例:

TList*pList=newTList();

AnsiStringTheObject="Thisisanobject."

pList->Add(TheObject);

MessageDlg("列表中有"+IntToStr(pList->Count)+"个元素",

mtInformation,TMsgDlgButtons()<<mbOK,0);

pList->Remove(TheObject);

deletepList;

pList=NULL;

typedefint__fastcall(*TListSortCompare)(void*Item1,void*Item2);
void__fastcallSort(TListSortCompareCompare);
通过自定义的比较函数Compare来对列表中的元素进行排序。
示例:

int__fastcallCompareNames(void*Item1,void*Item2)

{

returnCompareText(((TComponent*)Item1)->Name,((TComponent*)Item2)->Name);

}

void__fastcallTForm1::Button1Click(TObject*Sender)

{

List1->Sort(CompareText);

}


2.1.2AnsiString类
AnsiString是C++Builder中仿照ObjectPascal语言中的长字符串类型设计的一个字符串类siString类型。
本质上,AnsiString仍然以’’作为字符串的结尾标志,只是在字符串的前面添加了几个字节的信息头。
比较C++中提供的串类型,AnsiString提供了更多实用、方便的方法。
赋值:=
连接:+、+=
比较:<、<=、==、>、>=、!=
字符索引:[](注:串中字符索引从1开始)
char*__fastcallc_str()const;
返回一个C/C++标准字符串指针。
AnsiString&__fastcallDelete(intindex,intcount);
删除index开始的count个字符。
提示:count可以超过剩余长度,则删除所有剩余。
staticAnsiString__fastcallFormatFloat(constAnsiString&format,constlongdouble&value);
将value用format指定的格式转换为字符串形式。
示例:
Formatstring1234-12340.50
#,##0.001,234.00-1,234.000.500.00
0.000E+001.234E+03-1.234E+035.000E-010.000E+00
提示:
#表示此位置可空缺。
0表示此位置以0填充。
AnsiString&__fastcallInsert(constAnsiString&str,intindex);
插入。
staticAnsiString__fastcallIntToHex(intvalue,intdigits);
Hex格式的串。
bool__fastcallIsEmpty()const;
判断空串。
int__fastcallLength()const;
长度。
staticAnsiString__fastcallLoadStr(HINSTANCEhInstance,intident);
staticAnsiString__fastcallLoadStr(intident);
从指定句柄中读取标志为ident的字符资源。
如果没有指定句柄,则从当前模块(如可执行程序)中读取。
AnsiString__fastcallLowerCase()const;
AnsiString__fastcallUpperCase()const;
大小写转换。
int__fastcallPos(constAnsiString&subStr)const;
定位子串。
注意:无子串时返回0(因为bc++串中字符索引从1开始).
AnsiString&__fastcallSetLength(intnewLength);
修改串的Length属性。
staticAnsiString__fastcallStringOfChar(charch,intcount);
字符重复成串。
AnsiString__fastcallSubString(intindex,intcount)const;
截取子串。
double__fastcallToDouble()const;
int__fastcallToInt()const;
int__fastcallToIntDef(intdefaultValue)const;
ToInt和ToIntDef方法都是将字符串转换为一个整型数,不同之处在于如果字符串没有可用的字符,前者会抛出一个异常,后者则会返回默认值defaultValue。
AnsiString__fastcallTrimLeft()const;
AnsiString__fastcallTrimRight()const;
AnsiString__fastcallTrim()const;
截去首尾空格。

2.1.3Set(集合)
Set<type,minval,maxval>是一个C++类模板,用来实现集合这个抽象数据类型。
此模板使用时有三个参数,其中type用来指定集合元素的类型(如int、char、枚举变量等);
minval为集合元素的最小值,minval不能小于0;maxval为集合元素的最大值,它不能大于255。
对集合变量的声明并不会对它的值初始化,可以在声明变量之后使用<<操作符赋值,如下:

Set<char,'A','C'>s1;//直接定义集体对象

s1<<'A'<<'B'<<'C';//初始化

typedefSet<char,'A','Z'>UPPERCASESet;//使用typedef

UPPERCASESets2;

s2<<'A'<<'B'<<'C';

Set常用方法:
Set&__fastcallClear();
清空集合。
bool__fastcallContains(constTel)const;
查询集合对象中是否含有指定的元素el。
bool__fastcallEmpty()const;
判断空集。
比较:==、!=
判断集合是否相等。
注意:只有类型和包含元素都相等的两个集体才相等。前面的例子中s1!=s2,虽然它们含有相同的元素。
operator+/*/-
分别为集合之间的并集、交集、并集中交集的补集运算的运算符。//并、交、差集?
operator<</>>
添加或删除元素。
集合示例:
如判断键盘事件和鼠标事件时,需要处理的Shift参数就是一个集合类型
typedefSet<Classes__1,ssShift,ssDouble>TShiftState。
2.1.4DynamicArray(动态数组)
DynamicArray<type>ArrayName;
这是一个模板类,它的元素可以为任意类型。
大小Length。
索引[]。
比较和赋值:
赋值要使用Copy/CopyRange方法。
注意:不要在动态数据上使用==、=,那操作的对象是指针!
多维动态数组,如

typedefDynamicArray<DynamicArray<AnsiString>>T2DStringArray;

T2DStringArrayd2a;

d2a.Length=3;

for(inti=0;i<d2a.Length;i++)

{

d2a[i].Length=4;

}


2.1.5TStream(流)
流类用于进行各种存储媒介之间的数据操作。
TStream类的几种派生类分别实现与某种特殊的存储媒介之间的数据交换,如磁盘数据、内存数据等。除了数据的读取、写入和复制之外,在TStream类实例中还可以用Seek到流中的任意位置。
TStream是一个抽象类,其派生类有TFileStream、TStringStream、TMemoryStream等。
属性:
Position流文件当前指针的位置。以字节为单位。
Size流文件大小。以字节为单位。
方法:
__int64__fastcallCopyFrom(TStream*Source,__int64Count);
__int64__fastcallCopyFrom(TStream*Source,__int64Count);
从Source流文件中读取Count字节的内容到当前流文件中,函数返回值为实际拷贝的字节数。
示例:
将指定文件复制到工程所在目录。

void__fastcallTForm1::Button1Click(TObject*Sender)

{

AnsiStringNewFileName=ExtractFilePath(Application->ExeName)

+ExtractFileName(Edit1->Text);

AnsiStringmsg=Format("Copy%sto%s",ARRAYOFCONST((Edit1->Text,NewFileName)));

if(MessageDlg(msg,mtInformation,mbOKCancel,0)==mrOk)

{

TFileStream*OldFile=newTFileStream(Edit1->Text,fmOpenRead);

try

{

TFileStream*NewFile=newTFileStream(NewFileName,fmCreate);

try

{

NewFile->CopyFrom(OldFile,OldFile->Size);

}

__finally

{

FreeAndNil(NewFile);

}

}

__finally

{

FreeAndNil(OldFile);

}

}

}

virtualint__fastcallRead(void*Buffer,intCount)=0;
此方法用于从当前流文件的当前指针所在位置开始,读取Count字节的内容到Buffer内
存位置,返回值为实际读取的字节数。如果返回值小于Count,则意味着还没有读够Count
个字节的内容,指针位置已经到了流文件的末尾。其它的数据读取的方法,如ReadBuffer和
ReadComponent,都是通过对Read方法的调用来实现的。
virtualint__fastcallSeekffset,(intOWordOrigin);
virtual__int64__fastcallSeek(const__int64Offset,TSeekOriginOrigin);
读取流。
返回值为流文件中新的当前位置(Position属性)。
Origin参数的取值可以为soFromBeginning(流文件的开始位置)、soFromCurrent(流文件的当前位置)或soFromEnd(流文件的结尾位置)。
virtualintfastcallWrite(constvoid*Buffer,intCount)=0;
写入流。
返回值为写入的字节数。
所有其它的数据写入方法,如WriteBuffer和WriteComponent都是靠调用Write来实现的。
TMemoryStream是TStream的派生类,它有两个比较重要的方法,SaveToStream和
LoadFromStream,下面是它们的一个示例:

void__fastcallTForm1::Button1Click(TObject*Sender)

{

TMemoryStream*pms=newTMemoryStream();

//将列表框的内容写入流文件

ListBox1->Items->SaveToStream(pms);

//重置流文件的当前位置到文件的开头

pms->Position=0;

//将流文件的内容写入RichEdit组件

RichEdit1->Lines->LoadFromStream(pms);.

deletepms;

}


2.2函数
2.2.1系统函数
随机函数
externPACKAGEExtended__fastcallRandG(ExtendedMean,ExtendedStdDev);
产生服从高斯分布的随机数
externPACKAGEdouble__fastcallRandomFrom(constdouble*AValues,intAValues_Size);
externPACKAGEint__fastcallRandomFrom(constint*AValues,intAValues_Size);
externPACKAGE__int64__fastcallRandomFrom(const__int64*AValues,intAValues_Size);
RandomFrom函数用于从一个数组中随即取得其元素.
externPACKAGEintRandSeed;
随机数种子.
externPACKAGEvoid__fastcallRandomize(void);
初始化随机数产生器.
externPACKAGEint__fastcallRandomRange(costintAFrom,constintATo);
此函数返回一个从AFrom到ATo(包含此值)的整数,如果AFrom大于ATo,可以返回负数。
时间函数
voidgettime(structtime*timep);
voidsettime(structtime*timep);
获取/设置系统时间。
其中time结构
structtime{
unsignedcharti_min;/*minutes*/
unsignedcharti_hour;/*hours*/
unsignedcharti_hund;/*hundredthsofseconds*/
unsignedcharti_sec;/*seconds*/
};
clock_tclock(void);typedeflongclock_t;
示例:计算程序中某段代码的执行时间

#include<time.h>

#include<stdio.h>

#include<dos.h>

intmain(void)

{

clock_tstart,end;

start=clock();

delay(2000);

end=clock();

printf("Thetimewas:%fn",(end-start)/CLK_TCK);

return0;

}

内联函数
对于频繁调用的简短函数,为了省去函数调用和返回的时间,在函数之前添加Inline声明它为内联。
inlinechar*X::func(void){returni;}
此函数是定义类X中的成员函数func为Inline函数。
如果在类的定义中直接编写函数代码,则跟在函数前添加Inline标志的作用相同。
2.2.3参数个数不定的函数
可以使用va_arg、va_end、和va_start三个宏来处理不定长的函数参数列表,它们定义在stdarg.h中。
voidva_start(va_listap,lastfix);
typeva_arg(va_listap,type);
voidva_end(va_listap);
示例:求所有入口参数的代数和

#include<stdio.h>

#include<stdarg.h>

/*calculatesumofa0terminatedlist*/

voidsum(char*msg,...)

{

inttotal=0;

a_listap;

intarg;

va_start(ap,msg);

while((arg=va_arg(ap,int))!=0)

total+=arg;

//MessageDlg(AnsiString("sumis")+total,mtInformation,TMsgDlgButtons()<<mbOK,0);

}

voidmain()

{

sum("Thetotalof1+2+3is%dn",1,2,3,0);

}

免责声明:文章转载自《Borland C++ 语法摘要》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇js 里面的 function 与 FunctionSQL 多条件查询下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

cppcheck,代码简单分析,以及实现一个简单的模块

经过半天的分析和了解,大致明白了这个工具的使用方法和原理。 这个工具,会将一个源文件(目前我是用单一源文件测试的,没有使用目录测试), 每一个有效符号或者元素都解析出来,之后储存在一个大list里面,供后续模块检测时使用, 但是一些特殊的元素,不会被列入list,如调用约定(__stdcall 此类等等),其他应该还有,但是还没使用到, 目前看到的情况是,...

Openssl 之大数运算函数 BN

Openssl 之大数运算函数 BN 主要介绍Openssl中的有关大数运算函数,这个对于RSA研究和实现比较有价值1.初始化函数BIGNUM *BN_new(void); 新生成一个BIGNUM结构void BN_free(BIGNUM *a); 释放一个BIGNUM结构,释放完后a=NULL;void BN_init(BIGNUM *); 初始化所有项...

Vue安装与简单使用

Vue入门 使用Typora打开https://pan.baidu.com/s/1Mf3ZFSthdVUQevqWr777eA 提取码: hg9b vue中文官网教学 安装与使用,我也经常看这个 点击进入 认识Vue Vue (读音 /vjuː/,类似于 **view**) 是一套用于构建用户界面的**渐进式框架** 安装Node.js...

ES6新增数组方法

1.扩展运算符可以将数组或者对象转为用逗号分隔的参数序列 let ary = [1, 2, 3]; ...ary // 1, 2, 3 console.log(...ary); // 1 2 3,相当于下面的代码 console.log(1,2,3); 2.扩展运算符可以应用于合并数组 let ary1 = [1, 2, 3]; let...

使用java8的stream对数组进行求和

1、对BigDecimal类型的值求和。 List<Map<String,Object>> list = new ArrayList<>(); Map<String,Object> stu1 = new HashMap<String, Object>(); stu1.put("name", "张三...

C语言结构体指针(指向结构体的指针)详解

C语言结构体指针详解 一.前言 一个指向结构体的变量的指针表示的是这个结构体变量占内存中的起始位置,同样它也可以指向结构体变量数组。 *a).b 等价于 a->b。 "."一般情况下读作"的”,结构体a的b。 “->”一般读作"指向的结构体的",a指向的结构体的b。 二.实例 #include<stdlib.h> #include&...