为什么TCOMPONENT类的构造函数是虚拟的??(5分)

  • 主题发起人 主题发起人 tt_mok
  • 开始时间 开始时间
T

tt_mok

Unregistered / Unconfirmed
GUEST, unregistred user!
今天看了VCL的源代码,发现Tcomponent的constructor是虚拟的,
不明白如何体现其多态性,因为构造函数是通过类调用的,而不是
通过对象调用的,那他是虚拟的又有什么用呢?不明白,哪位高手给
小弟讲解一下呢,小弟只有5分了,请笑纳,非常非常感谢!!
 
我愿意出分,谁知道答案告诉我
 
http://www.isunsoft.net/forum/link.asp?TOPIC_ID=204
 
to yhaochuan
:谢谢你的关注,不过你好像没有理解我的问题
我当然明白什么是虚拟函数,只是不明白虚拟
的构造函数有什么用?
如 a:=Ta.Create(self);
Create都是通过TA调用的,她是虚拟的又有什么用呢?
 
对象的Create和对象其它的对象方法、属性不同,
对象的其它方法、属性,必须在对象产生后才可以调用。
如果Create也要这样的话那建立一个对象可能要象C一样new aobject了,
我想这因素是和它是虚拟的有点关系吧。
 
TComponent必须设计成虚拟的,原因是必须保持固定的调用格式。对于其它动态创建的对
象来说,是不是虚拟、或者说调用格式是否统一是不重要的。
1.当你在控件板上选择一个控件并放置在Form上的时候,如何系统不知道TComponent构造
函数的调用格式,如何能够加上去?
2.VCL从dfm中装载的时候,也需要调用构造函数。如何调用格式不统一,是无法保证装载
成功的。
 
to barton:
有点不明白,虚拟跟调用格式有什么关系,
调用格式是什么意思,对不起,麻烦你再详细
说明一下,谢谢谢谢
 
Create方法在子类里是要被重载的, 而重载必须是虚方法. 其实
constructor = class function
 
to tseug:
就算不是虚方法,也能重新声明的呀,为什么要定义成虚方法呢?
 
>>就算不是虚方法,也能重新声明的呀,为什么要定义成虚方法呢?
兄弟,你说的对呀!就是怕你重新声明才通过定义成虚方法,让你只能重载,而重载是不可
能修改参数格式的。
>>调用格式是什么意思,对不起,麻烦你再详细
Constructor TComponent(AOwner: TComponent)
virtual;
这就是Delphi在自动调动TComponent的构造函数时用的调用格式呀?换句话说,调用格式
就是接口格式。
 
说得很清楚,我想是这个原因
 
[:(][:(!][^][?][:(][8D][:D][:)]
 
后退
顶部