阁下:
不关是C++还是DELPHI还是别的面向对象的编程语言,在这里我提出一个问题,这个问题如下:
类在被编译完后,或在别创造对象之前,它在内存中是怎么样被存储的,或它在内存中的存贮结构是什么样的?类方法是怎样被调用的,调用机制是什么?请各路英雄,不要肤浅地回答它,要深入事物的本质?谢谢!
不关是C++还是DELPHI还是别的面向对象的编程语言,在这里我提出一个问题,这个问题如下:
类在被编译完后,或在别创造对象之前,它在内存中是怎么样被存储的,或它在内存中的存贮结构是什么样的?类方法是怎样被调用的,调用机制是什么?请各路英雄,不要肤浅地回答它,要深入事物的本质?谢谢!
方法则是被编译成普通函数的样子,隐含了this指针而已
不过对于虚函数编译后的内容就分成两种情况:
1.作为指针变量保存在结构体空间中
2.固定作为指定方法编译成函数类型
请原谅我的冒失,我想进一步探讨这个问题当然都是计算机科学或软件的基本问题:
比如如下语句:argument:type;(argumet是变量,type是数据类型,包括简单类型和复杂类型)
在这里我们没有对其初始化,当程序通过编译后,编译器是否为变量分配了内存?我想是分配了的,当这个变量被某个函数引用时,在引用之前必须对其初始化。当然在出里其生存域后,变量所占有的空间将被释放,那么请问这种释放的机制是什么?你能帮我解答吗?
如果argument是对象变量,那么情况又是怎样的呢?在C++中构造函数是在对象声明时自动调用,如果C++的构造函数没有传递参数,那么对象是否被初始化,编译器是否为对象的数据域或函数域分配空间。而对于Object Pascal当这样的声明是不会调用构造函数的,我们必须手工构造,那么在这种情况下,编译器是否为argument的各字段分配空间?当然argument只是一个指针或句柄。
对于类的问题如下:我们把类的代码写入我们的应用程序,如果我们的类没有创建实例,那么通过编译后,编译器是否为我们的类分配空间,如果分配,那么这样的空间的结构是什么样子(和对象比较如何)?我是通过什么方式访问这个空间,该域的句柄是什么?类名是否就是指向该域的指针?请阁下回复!谢谢!
细胞凋亡
2004。12。5
你能告诉我吗?
网上也有此本电子图书的
邮箱是[email protected]
然而,正是由于在DELPHI中有动态的类的类型信息,有真正虚拟的类方法,以及构造函数是基于类实现的等等这些关键概念,才可实现虚拟的构造函数。对象是由类产生的,对象就好象成长中的婴儿,而类就是它的母亲,婴儿自己的确不知道自己将来会成为什么样的人,可是母亲们却用各自的教育方法培养出不同的人,道理是相通的。
正是在TComponent类的定义中,构造函数Create被定义为虚拟的,才能使不同类型的控件实现各自的构造方法。这就是TClass创造的类之类概念的伟大,也是DELPHI的伟大。
(DELPHI原子世界)
没看得太明白,大家来看看啊~~
http://community.csdn.net/Expert/topic/3607/3607806.xml?temp=.9890863