C++ Builder 初学问与答(十八)

作者:董维春 网名:ch_builder

版权要求:请务必尊重知识产权,未经授权不要转载、摘录

11)在CB中听说有动态数组之说,我想问什么是动态数组?

答:动态数组(DynamicArray)是CB中引起的,它可以动态地改变数组长度,并且象一般数组那样易于使用。DynamicArray可以说是VCL中的一个重大的革新。

12)动态数组是如何实现与应用的呢?

答:动态数组是以类的方式实现的。CB提供了DynamicArray类模板,使用这个类模板可以声明实际动态数组。使用下面的语法:

DynamicArray<type>ArrayName;

其中type为动态数组的数据类型,动态数组支持任何类型的数据、对象,甚至是一个动态数组对象。例如可以这样声明一个动态数组:

DynamicArray<DynamicArray<AnsiString>>aArray;

这相当于声明了一个二维动态数组。

动态数据具有一个Length属性,通过这个属性可以设置或获得数组的长度。例如:

DynamicArray<int>IntArray;

IntArray.Length=10;

ShowMessage(“ArrayLength:”+IntToStr(IntArray.Length));

若是要释放一个动态数组,应该将该数组的Length属性设为0

动态数组有LowHigh两个属性,分别表示动态数组的起始下标和中止下标。起始下标总是为0,而中止下标总是等于Length-1

动态数组实现了“=”操作符,可以复制整个数组到另一个数组。同时,动态数组还提供了CopyCopyRange方法,CopyRange方法可以复制指定范围的数据。

13VCL对象在堆中与在栈中创建是不是都可以?

答:VCL对象只能在堆中创建,在栈里不可以的。

栈是存放函数的所有动态局部变量及函数调用和返回的有关信息的一块内存。栈的内存管理严格遵循先进后出的顺序,这一点正是实现函数调用所需要的。从栈中分配内存效率特别高。数据对象使用栈中的内存(如动态局部变量)比使用堆中内存会使程序运行更快。

堆提供了malloc()calloc()realloc()new等函数获取内存空间的一块内存。从堆中获取内存比从栈中要慢得多,但堆的内存管理却比栈灵活得多,任何时候你都可以从堆中获取(或释放)内存,我们可以按任意顺序进行。用来存放递归数据结构的内存几乎都要从堆中获取。用来存放字符串的内存通常也从堆中获取,尤其是对那些在程序运行时可能出现的很长的字符串。

从堆中获取的内存要用free()delete来释放,它本身不会自动释放。

由于Object Pascal中所有的对象都只能建构于堆中,无法和C++一样,能够在栈(在函数内创建类的对象)、数据区段(在函数外创建类的对象)、堆(用new等函数来创建类的对象)三种地方建立对象,所以VCL类的对象我们只能在堆中创建。

如创建一个按钮对象,我们可以这样来创建:

TButton *btnMy= new Tbutton(NULL)

可以写成如下程式:类名  *对象名=new 类名();

()里面可以是你已创建的该类对象实体的名字,工程的名字,或NULL

14)问:dynamic_cast是用来做什么的?

答:dynamic_cast 可以把某种对象强制转成另一个类,这里所谓的强制仍有其局限,也就是说,如果类转不过来,那么系统将不会进行转换操作的。若类型转换无法成功则返回一个值是0的指针。若参数T是一个参考类型,而类的转换又失败了,系统将会丢出一个异常处理信息:Bad_cast。但你放心这不会导致系统死机,所以可以放心使用。其程式:

dynamic_cast <T> (ptr)

T参数一定要是一个指针、void* 、或是已经定义过的类,而ptr参数则必须是一个指针(pointer 或是一个引用(reference)。如果T的类型是void*,那么ptr则是一个可以访问最下面类里的任何成员,当然这样的类将不可以是基础类。

(未完待续)

Borland C++Builder 5.0 (简介)   Borland C++Bilder 5.0是Interprise(Borland)公司推出的基于C++ 语言的快速应用程序开发(Rapid Application Development,RAD)工具,它是最先进的开发应用程序的组件思想和面向对象的高效语言C++融合的产物。C++Builder 充分利用了已经发展成熟的Delphi 的可视化组件库(Visual Component Library,VCL),吸收了Borland C++ 5.0 这个优秀编译器的诸多优点。C++Builder 结合了先进的基于组件的程序设计技术,成熟的可视化组件库和优秀编译器,调试器。发展到5.0版本,C++Builder 已经成为一个非常成熟的可视化应用程序开发工具,功能强大而且效率高。 C++Builder的特色: 1.C++Builder 是高性能的C++开发工具   C++Builder是基于C++的,它具有高速的编译,连接和执行速度。同时,C++Builder具有双编译器引擎,不仅可以编译C/C++程序,还能编译Object Pascal语言程序。 2.C++Builder是优秀的可视化应用程序开发工具   C++Builder是一完善的可视化应用程序开发工具,使程序员从繁重的代码编写中解放出来,使他们能将注意力重点放在程序的设计上,而不是简单的重复的劳动中。同时,它提供的完全可视的程序界面开发工具,从而使程序员对开发工具的学习周期大大缩短。 3.C++Builder具有强大的数据库应用程序开发功能   C++Builder 提供了强大的数据库处理功能,它使的程序员不用写一行代码就能开发出功能强大的数据库应用程序,这些主要依赖于C++Builder众多的数据库感知控件和底层的BDE数据库引擎。C++Builder除了支持MicroSoft的ADO(Active Data Object)数据库连接技术,还提供了一种自己开发的成熟的数据库连接技术——BDE(Borland Database Engine)数据库引擎。 4.C++Builder具有强大的网络编程能力 C++Builder具有众多的Internet应用程序开发控件,如WebBroker,CppWebBroswer,WinSocks等,它们基本含盖了Internet应用的全部功能,利用它们程序员可以方便地建立自己地Internet应用程序。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值