读书人

Dephi中“对象、对象引用、类引用、对

发布时间: 2012-03-02 14:40:29 作者: rapoo

Dephi中“对象、对象引用、类引用、对象指针”有什么区别?如何使用?
原来一直使用C++语言,这段时间想研究一下VCL为了看懂源码恶补了一下Object Pascal发现很多问题。

我们知道在c++中:
对象是类的实例,编译器根据类定义给对象分配内存,在程序中用.访问对象的成员;
对象引用是已经存储对象的别名,编译器没有为对象引用分配内存,在程序中访用.访问对象引用的成员;
对象指针是指向对象的一个变量,编译器为对象指针分配了4B的内存空间,内存中存放对象的地址,在程序中访用->访问对象引用的成员;
那么在dephi中
对象是什么?
对象指针什么?
对象引用什么?
类引用什么?
我比较迷茫请高手指教!!!

[解决办法]
DELPHI中的对象
相当于C++中的对象指针/对象引用。

例如:
var Button :TButton;

相当于BCB中的 TButton *Button;

类引用是 针对于类而言,它把类当成一个对象来处理。

例如:
type ButtonClass=class of TButton;

C++里没有“类引用”这个概念。
[解决办法]
Delphi的类对象与C++有些区别,C++类没有统一的基类,其对象即可以是堆对象(new的动态对象,对象指针形式),也可以是栈对象(静态对象,对象变量形式);而Delphi的类都是从TObject这个基类而来,只能是堆对象,因此,Delphi的类本身就是指针!Delphi对象成员的引用符也不象C++用.和->区分,而是全部用.引用,而不是指针的record类型也是用.引用其成员,这就造成初学Delphi的人搞迷糊。其实,Delphi也有和C++类似的栈对象类型object,不过这只是为了和DOS的pascal兼容而保留的,一般极少用。
在C++中,引用其实也是指针,可以说明一个引用变量,也可以把函数参数说明为引用,还可以作为函数引用值返回;而在Delphi中,引用只用来说明过程参数。其实我认为,在引用的使用上C++有些混乱(类似Delphi的对象成员引用符与record成员引用符的混乱),其实说明一个引用变量没多大意义,直接说明为指针,清晰明了,参数说明为引用倒是很好。
[解决办法]
对象相当于“类的变量”,对应于一段内存
C++可以在栈和堆上为“类的变量”分配空间,对象相应的可以分成“栈对象”、“堆对象”
Delphi只在堆上为对象分配空间,因此Delphi中的对象相当于C++中“堆对象”
---------------------------------------------
对象指针是指向一个对象的指针
引用是用法像“变量”的指针,引用比指针多一些限制

Delphi中的对象引用和对象指针是一回事

Delphi中只能通过对象引用使用对象,有时也会将“对象引用”叫做“对象”,
因此在某些场合要分清楚,说的“对象”和实际意义上的对象是有差别的
---------------------------------------------
类引用是“类的类型”的“对象引用”,
把一个类看做对象,这个对象属于的类叫做“类的类型”,
这个对象的引用,叫做类引用







读书人网 >.NET

热点推荐