那位老大给介绍OBJECT PASCAL的类,对象,的概念 学OBJECT PASCAL,有点看不懂!!!如果闲麻烦,介绍文章,E_BOOK也可以啊, 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 类:Tmyclass = class private public protected publishedend;对象: myobject: Tmyclass <<Delphi技术手册>>的一段话粘出来骗点分,呵呵可以将类想象为一种特殊的记录。与记录相似的是,一个类描述的是一种特殊的类型,它由任意多个部分组成,每一个部分称为一个字段。与结构不同的是,一个类可以包含函数和过程(称为方法method),以及属性property。一个类可以继承自另一个类,因此,它继承了祖先类中所有的字段,方法,以及属性。一个对象(Object)是一个类的动态实例。对象总是从堆中动态分配得来,因此一个对象引用(object refrence)更象一个指针(但是不需要pascal的^操作符)。当你将一个对象引用赋值给一个变量时,Delphi只是复制了指针,而不是复制整个对象实例。程序中不再结束使用一个对象时,应当调用Free方法显式地释放该对象。Delphi没有提供自动的垃圾收集机制(后面一章中的提到的接口除外)。为简短起见,术语“对象引用”简称为“对象”,但是对象更精确的表述应当是一块内存,Delphi在其中存放该对象的所有字段的值。在Delphi中使用一个对象的唯一方法就是使用对象引用。一个对象引用通常以一个变量的形式存在,但是也有函数或者属性返回值的形式。类同样是一个独立的实体(与Java中的类似,但与C++中的不同)。在Delphi中,类表现为内存中一张只读的表,表中存放着指向该类的虚方法的指针以及其他许多信息。一个类引用(Class reference)就是指向该表的一个指针。类引用最常见的用法是创建一个对象或者用来测试一个对象引用的类型,也可以在其它许多场合使用。比如,传递类引用给某个例程或者从一个函数中返回一个类引用。类引用的类型称为元类(metaclass)。 类和对象的概念不是Object Pascal中特有的,而是面向对象中的知识。类:具有相同属性和方法的对象的集合;对象:类的实例。类是抽象的,而对象是具体的。如果用Object Pascal 来定义类和对象;类: TTestClass = class private {private 成员描述} protected {protected 成员描述 } public {public 成员描述 } published {published 成员描述 } end;//对象 TestObject: TTestClass;我说的你不一定能够理解,而且我说的也不一定跟清楚,但是只要你慢慢的学习,慢慢体会,就会明白什么是类,什么是对象,还有其它的一些面向对象的概念! Object Pascal中的对象只不过就是一个指向类的指针而已。这点要铭记于心啊 自己去查资料理解更好,也许概念性的问题不适合在论坛中问吧,用搜索引擎找找资料看看,实践中还可以慢慢理解按我的理解,上面除了xzgyb摘录的话比较准确外,其它的解释都不太对(谁拿鸡蛋砸我? ^_^ 先闪) 搜索引擎:www.google.comOBJECT PASCAL的类 对象 概念等.. 到这儿下载书看看吧!http://www.codestudy.net/book/subclass.asp?classid=16&id=22 共鸣:“老达摩”和那个拉摩托的骡子说的很不错,类和对象是面向对象技术中的概念,很多开发语言都运用了这一技术而且一直在发展。杂音:有人说“Object Pascal中的对象只不过就是一个指向类的指针而已。这点要铭记于心啊”。准确地说应当是,可以把Object Pascal中的对象变量理解为一个指针(这个变量占用的内存以及这个变量的作用与指针很相似),这个指针指向该对象所属类或者其祖先类的一个实例,也可以是一个空指针nil而不指向任何实例。当然,这一概念有助于理解类和对象在Object Pascal的内部是如何实现的,特别是内存管理方面,而与楼主所问没有很大关系,甚至可能误导为:哦,原来对象和类的关系就是:对象是类的指针啊。 to cnsuyong 不是可以将对象理解为指针,是他就是一个存在于栈中的,但指向目标是存在于堆中的4字节指针。而且它指向的不是实力,而是实力的内存布局中的VMT,而且一个程序中所有的类实力都指向相同的VMT(如果所属类不同,当然指向的VMT也就不同)。 对象不是类的指针,类类型变量才是类的指针,对象并不是类类型变量,两种对象模型之间存在着一个级别差。 补充几点:1。一个类中包含数据和应用数据的一些动作,如果一个类只有数据是不成功的类,如果只有动作,那更不成功,那是接口。2。程序中类的对象存在与栈中,在这个指针位置后排列着类的内部对象的存储,因为每个类实力的私有数据可能值有差别。但他们的函数布局是完全一致的,所以多个同一类的对象共享一个单一的VMT,这个VMT是实现RTTI和多态的根基。3。至于类类型和对象,是非常的相似,但前者不包含私有数据部分。 To FrameSniper(框架狙击手):老兄,恐怕你没有仔细推敲俺的解释吧。举枪就打,不太好吧,尤其是误伤。不是我较真,但为了对得起楼主,咱说什么也不能误导吧。首先,建议老兄参阅 Object Pascal Reference -> Memory management -> Class types,这样就不至于认为对象作为指针指向的是VMT了;其次,建议老兄再次核实对象变量、对象实例、类、类的VMT等之间的内存及指针关系,这样就不至于把它们之间的内存管理搞混淆了;第三,建议老兄研究一下TObject类,这样就可以更全面地理解类(以及相应的域、方法)和接口之间的联系和区别了。对于“首先”和“其次”:例如,F1和F2的类型都是TForm类,假如F1和F2指向TForm的VMT,那么它们各自的域存储在何处?显然,F1和F2指向TForm的两个实例即两块不同的内存区域,假定为A1和A2,而A1和A2的前4个字节作为指针指向TForm的VMT。也就是说,每个实例对象拥有自身的域,而同一个类的所有实例共享一份方法。这里,如果F1和F2的指针值相等,那么它们指向同一个实例。对于“第三”:Delphi规定,凡是在声明时没有明确说明其祖先类的类,都缺省认为是TObject类的后裔。TObject类中只有方法而没有域,按照老兄您的说法,它就应该是一个接口。至于类声明是否合法(在这里用成功似乎不很合适甚至很不合适),与这个类中是否声明域没有因果关系,与这个类中是否声明方法也没有因果关系。原因很简单,类可以被继承,派生类可以增加域,也可以增加方法,这是面向对象技术的基本常识。至于什么是接口,由于三言两语说不清楚,我就不罗嗦了。但有一点是显而易见的,接口不等于没有声明域的类。关于楼主的问题,恐怕再写几千字也说不清楚,因为涉及的细节太多。 虚心接受,重新研究!!大大前天买了本《Delphi技术手册》,呵呵! http://expert.csdn.net/Expert/topic/1552/1552016.xml?temp=.4607355各位都去看看这个帖子,发发意见! FrameSniper(框架狙击手):不好意识,才看到,不过你已买了<<delphi技术手册>>不过我也只有delphi对象模型那几节买了就不用贴了 呵呵,等我把这个本书研究透彻了,我把它贴在 CSDN 上,呵呵 对象指针,对象(实体)和类的具体关系:------------------------| 存在于栈中的对象指针 |-----------------|------------------------ | | | \|/ 存在于堆中的对象实体 -------------------------- | 指向VMT的指针 |------------- |------------------------| | | | | | | | | 类的字段数据 | | |(不同对象具有不同的值)| | | | | | 。。| | -------------------------- | | | | | | | | 指向RTTI表的指针列表 |/ | | |-------------------| 偏移量=0 \| |\ VMT说白了就是类 -----------------|-------------------------| /| | | | | 指向虚方法入口地址的指 | | 针列表 | | | tchart绘图 有关封装数据库操作的 dll问题 数据查询也要用事务提交和回滚吗? Excel复制、粘贴问题 传输接收问题 想编个局域网共享的数据库软件 如何在2000下带路径显示运行的进程。100分送上 数据库访问???UP有分!!!! 请问怎样在Amazon上买书? delphi的数据库引擎BDE、ADO、InterBaseExpress各有什么特点? sql如何赋值? 错误:Error creating cursor handle
Tmyclass = class
private
public
protected
published
end;对象:
myobject: Tmyclass
粘出来骗点分,呵呵可以将类想象为一种特殊的记录。与记录相似的是,一个类描述的是一种特殊的类型,它由任意多个部分组成,每一个部分称为一个字段。与结构不同的是,一个类可以包含函数和过程(称为方法method),以及属性property。一个类可以继承自另一个类,因此,它继承了祖先类中所有的字段,方法,以及属性。一个对象(Object)是一个类的动态实例。对象总是从堆中动态分配得来,因此一个对象引用(object refrence)更象一个指针(但是不需要pascal的^操作符)。当你将一个对象引用赋值给一个变量时,Delphi只是复制了指针,而不是复制整个对象实例。程序中不再结束使用一个对象时,应当调用Free方法显式地释放该对象。Delphi没有提供自动的垃圾收集机制(后面一章中的提到的接口除外)。为简短起见,术语“对象引用”简称为“对象”,但是对象更精确的表述应当是一块内存,Delphi在其中存放该对象的所有字段的值。在Delphi中使用一个对象的唯一方法就是使用对象引用。一个对象引用通常以一个变量的形式存在,但是也有函数或者属性返回值的形式。类同样是一个独立的实体(与Java中的类似,但与C++中的不同)。在Delphi中,类表现为内存中一张只读的表,表中存放着指向该类的虚方法的指针以及其他许多信息。一个类引用(Class reference)就是指向该表的一个指针。类引用最常见的用法是创建一个对象或者用来测试一个对象引用的类型,也可以在其它许多场合使用。比如,传递类引用给某个例程或者从一个函数中返回一个类引用。类引用的类型称为元类(metaclass)。
类:具有相同属性和方法的对象的集合;
对象:类的实例。
类是抽象的,而对象是具体的。
如果用Object Pascal 来定义类和对象;
类:
TTestClass = class
private
{private 成员描述}
protected
{protected 成员描述 }
public
{public 成员描述 }
published
{published 成员描述 }
end;//对象
TestObject: TTestClass;我说的你不一定能够理解,而且我说的也不一定跟清楚,但是只要你慢慢的学习,慢慢体会,就会明白什么是类,什么是对象,还有其它的一些面向对象的概念!
www.google.com
OBJECT PASCAL的类 对象 概念
等..
http://www.codestudy.net/book/subclass.asp?classid=16&id=22
“老达摩”和那个拉摩托的骡子说的很不错,类和对象是面向对象技术中的概念,很多开发语言都运用了这一技术而且一直在发展。杂音:
有人说“Object Pascal中的对象只不过就是一个指向类的指针而已。这点要铭记于心啊”。
准确地说应当是,可以把Object Pascal中的对象变量理解为一个指针(这个变量占用的内存以及这个变量的作用与指针很相似),这个指针指向该对象所属类或者其祖先类的一个实例,也可以是一个空指针nil而不指向任何实例。
当然,这一概念有助于理解类和对象在Object Pascal的内部是如何实现的,特别是内存管理方面,而与楼主所问没有很大关系,甚至可能误导为:哦,原来对象和类的关系就是:对象是类的指针啊。
其次,建议老兄再次核实对象变量、对象实例、类、类的VMT等之间的内存及指针关系,这样就不至于把它们之间的内存管理搞混淆了;
第三,建议老兄研究一下TObject类,这样就可以更全面地理解类(以及相应的域、方法)和接口之间的联系和区别了。对于“首先”和“其次”:例如,F1和F2的类型都是TForm类,假如F1和F2指向TForm的VMT,那么它们各自的域存储在何处?显然,F1和F2指向TForm的两个实例即两块不同的内存区域,假定为A1和A2,而A1和A2的前4个字节作为指针指向TForm的VMT。也就是说,每个实例对象拥有自身的域,而同一个类的所有实例共享一份方法。这里,如果F1和F2的指针值相等,那么它们指向同一个实例。
对于“第三”:Delphi规定,凡是在声明时没有明确说明其祖先类的类,都缺省认为是TObject类的后裔。TObject类中只有方法而没有域,按照老兄您的说法,它就应该是一个接口。至于类声明是否合法(在这里用成功似乎不很合适甚至很不合适),与这个类中是否声明域没有因果关系,与这个类中是否声明方法也没有因果关系。原因很简单,类可以被继承,派生类可以增加域,也可以增加方法,这是面向对象技术的基本常识。至于什么是接口,由于三言两语说不清楚,我就不罗嗦了。但有一点是显而易见的,接口不等于没有声明域的类。关于楼主的问题,恐怕再写几千字也说不清楚,因为涉及的细节太多。
大大前天买了本《Delphi技术手册》,呵呵!
不好意识,才看到,不过你已买了<<delphi技术手册>>
不过我也只有delphi对象模型那几节
买了就不用贴了
| 存在于栈中的对象指针 |-----------------|
------------------------ |
|
|
\|/ 存在于堆中的对象实体
--------------------------
| 指向VMT的指针 |-------------
|------------------------| |
| | |
| | |
| 类的字段数据 | |
|(不同对象具有不同的值)| |
| | |
| 。。| |
-------------------------- |
|
|
|
| | |
| 指向RTTI表的指针列表 |/ |
| |-------------------|
偏移量=0 \| |\ VMT说白了就是类
-----------------|-------------------------|
/| |
| |
| 指向虚方法入口地址的指 |
| 针列表 |
| |