最近学Delphi,看到类类型这一章看不懂了!请高手给指引指引! 什么析构啊构造啊!都搞不懂!反正所有关于类的都不懂! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我也初学者,看看《Delphi 高手突破》讲得比较清楚 有没有电子书籍《Delphi 高手突破》的下载地址? 呵呵,类类型,很多的地方也叫类之类,都是一个概念!Delphi中的对象是基于指针的,也就是说,当你申明了一个类的实力对象的时候,如var Obj:TObject;你只是申明了一个指针,是4字节32位的,这个指针存在于那里呢?这个指针存在于栈中,但是这个时候只有这个指针,我们还没有创建这个实力(所以如果这个时候你在你的程序中直接调用这个对象,肯定会出现内存访问的错误)。所以在程序中我们需要这样创建:Obj:=TObject.Create(Owner); //★注意这个创建对象的方法,一会还要提到!!这个时候我们才真正创建了这个对象,这个对象又存在于那里呢,它不存在于栈里,而是存在与堆中。而栈中的那个指针指向的就是这个堆中的实力。对于一个类实力中的所有数据成员,他们都跟在那个指针后面按次序存储的。而那个指针指向的堆中的实力其实就是每个类的VMT(虚拟方法表),VMT是实现RTTI和多态的根本。具体里面都有些什么东西我们没有必要了解那么清楚了?呵呵,除非你想学习对象模型!!!一个程序中申明的同一个类的所有对象都共享同一个VMT。所以说,OP中的对象是指针,但这个指针的申明和使用过程中我们都看不到指针运算符^,对了,为什么叫他OP(OBJECT PASCAL),而不叫他PASCAL,就是因为OP对P的语法进行了适当的扩充,这里就是一个扩充的地方。所以,我们平常使用的对象,实际上只是一个存在与栈中的,但却指向堆中的指针。而所有对象的来源-----类,其实就是那个VMT(存在于堆中)。所以我们不妨将一个类就看做一个VMT,也就是说,一个VMT就是一个类,类就等于VMT。既然我们理解了DELPHI中的类和对象的概念(虽然很粗浅,但很容易理解),下面我们就来说说类类型。我们前面说过,类就是一个VMT,所以类类型,我们不妨就看做VMT的类型。所以知道了这个以后,我们没有必要去管理他什么析构,什么构造,只要知道类类型是在类的高度上进行类型化就可以了。现在我们回到刚才做标注的那个地方。为什么我们可以直接使用一个类的标识来调用他的Create方法,因为他就是一个类方法,因为在创建对象前对象还是不存在的,所以我们创建对象只可能使用类方法,但我们解析对象的时候却使用的是对象方法(绝对不能使用对象方法!)好了,说了一大堆,其实我自己都有点糊涂了,呵呵,如果各位还是不明白,去看看我朋友以前发的一个帖子。他在里面收集了几篇很不错的文章和几本相当好的书籍,大家有兴趣可以去看看。最后祝所有学习DELPHI的朋友学业有成,呵呵!千万不要犯全世界的程序员都容易犯的错误----长时间被迫于APP开发,最后几乎忘记了还存在一个低层!!我朋友(DDEVELOPER)发的帖子:http://expert.csdn.net/Expert/topic/1500/1500601.xml?temp=.7570154 请教:DBSumList控件怎么用? DBGRIDEh中某字段的合计数,如何显示在DBGRIDEh控件外?而不是在footer区 DBGrid 的 OnCellClick 事件 权限控制的问题 在delphi6中开发POP3程序出现的问题 有关数据备份 i/o error 183如何解决 怒放,来接分吧 有什么好的安装制作工具,目标程序是需要bde支持的delphi5程序 delphi 数据库编程中 怎样用程序实现真正的删除某些记录 有关Oracle数据库问题请教高手 你用什么分发? 超“急”报表问题
var
Obj:TObject;
你只是申明了一个指针,是4字节32位的,这个指针存在于那里呢?这个指针存在于栈中,但是这个时候只有这个指针,我们还没有创建这个实力(所以如果这个时候你在你的程序中直接调用这个对象,肯定会出现内存访问的错误)。所以在程序中我们需要这样创建:
Obj:=TObject.Create(Owner); //★注意这个创建对象的方法,一会还要提到!!
这个时候我们才真正创建了这个对象,这个对象又存在于那里呢,它不存在于栈里,而是存在与堆中。而栈中的那个指针指向的就是这个堆中的实力。
对于一个类实力中的所有数据成员,他们都跟在那个指针后面按次序存储的。而那个指针指向的堆中的实力其实就是每个类的VMT(虚拟方法表),VMT是实现RTTI和多态的根本。具体里面都有些什么东西我们没有必要了解那么清楚了?呵呵,除非你想学习对象模型!!!
一个程序中申明的同一个类的所有对象都共享同一个VMT。所以说,OP中的对象是指针,但这个指针的申明和使用过程中我们都看不到指针运算符^,对了,为什么叫他OP(OBJECT PASCAL),而不叫他PASCAL,就是因为OP对P的语法进行了适当的扩充,这里就是一个扩充的地方。所以,我们平常使用的对象,实际上只是一个存在与栈中的,但却指向堆中的指针。而所有对象的来源-----类,其实就是那个VMT(存在于堆中)。所以我们不妨将一个类就看做一个VMT,也就是说,一个VMT就是一个类,类就等于VMT。
既然我们理解了DELPHI中的类和对象的概念(虽然很粗浅,但很容易理解),下面我们就来说说类类型。
我们前面说过,类就是一个VMT,所以类类型,我们不妨就看做VMT的类型。所以知道了这个以后,我们没有必要去管理他什么析构,什么构造,只要知道类类型是在类的高度上进行类型化就可以了。现在我们回到刚才做标注的那个地方。为什么我们可以直接使用一个类的标识来调用他的Create方法,因为他就是一个类方法,因为在创建对象前对象还是不存在的,所以我们创建对象只可能使用类方法,但我们解析对象的时候却使用的是对象方法(绝对不能使用对象方法!)好了,说了一大堆,其实我自己都有点糊涂了,呵呵,如果各位还是不明白,去看看我朋友以前发的一个帖子。他在里面收集了几篇很不错的文章和几本相当好的书籍,大家有兴趣可以去看看。最后祝所有学习DELPHI的朋友学业有成,呵呵!千万不要犯全世界的程序员都容易犯的错误----长时间被迫于APP开发,最后几乎忘记了还存在一个低层!!我朋友(DDEVELOPER)发的帖子:
http://expert.csdn.net/Expert/topic/1500/1500601.xml?temp=.7570154