<Delphi高手突破>中的错误? (200分)

D

dedema

Unregistered / Unconfirmed
GUEST, unregistred user!
买了高手破突这本书,发现几个疑问,愿意共同探讨:
写在下面表达的只是个人的见解而己:

第13页的最后一句话:
  “。。。。。。此外,由于Object Pascal中所有的类(除了TObject类本身)都是
从TObject类派生,因此编绎器会调用TObject.Create()构造函数。不过,这个函数只是
一个空函数。”

我:既然是一个空函数,那还调用它干啥呢?依这句话的意思,所有的类(除TObject外
),都会调用TObject.Create()这个函数。实际上,要是这些派生类定义了它们自己的
Constructor,而没有用inherited关键字来调来父类的构造过程,那么派生类是没有机
会调用TObject.Create()的。

第39页:凡是带有abstract的方法的类是抽象类,抽象类永远不能建立对象实例。
我:这是C++中的说法,Delphi中可以建立抽象类的实例,只不过,不能对抽象类的
实例调用它的abstract方法的。

第42页的最后一句话:
  “。。。。。。在Object Pascal中,所有类实例都会有这么一个指向VMT的指针,如
果没有在类中声明虚方法,则该指针为nil。”

我:如果没有声明相对于父类的新虚方法,也没有重新Override某个虚拟或动态方法,这
个类实例的指针还是指向一个VMT,尽管这个VMT同它的父类的VMT的内容是一模一样,但在
内存中还是占用了不同的地址,这个类实例的指针指向它,当然不是为nil。

第68页的一段话:
  “Dispatch()负责将特定的消息分发给合适的消息处理函数。首先它会在对象本身类
型的类中寻找该消息的处理函数,如果找到,则调用它;如果没有找到而该类覆盖了
TObject的DefaultHandler(),则调用该类的DefaultHandler();如果两者都不存在,则继
续在其基类中寻找,直到寻找到TObject这一层,而TObject己经提供了默认的DefaultHandler()
方法。”

我:Dispatch这个方法将在类的DMT中去线性寻找消息处理函数,如果找不到,则到它的父
类中去消息处理函数(而不是找不到就调用DefaultHandler()),这样一直到它的父类,
在所有的父类都没有的情况下,才调用DefaultHandler。

欢迎讨论。

 
C

c2008

Unregistered / Unconfirmed
GUEST, unregistred user!
M

miaopeng

Unregistered / Unconfirmed
GUEST, unregistred user!
哪儿有《Delphi高手突破》下载呀
 
S

shiningplus

Unregistered / Unconfirmed
GUEST, unregistred user!
TObject.Create()应该是有代码的,估计是汇编写的
 
Z

zhu_jy

Unregistered / Unconfirmed
GUEST, unregistred user!
TObjcet.Create()可以说是一个空函数。
它是通过调用MakeObjcetInstance()生成实体的。
而class则是由编译器内嵌的。
//就知道这一点点了:)
 

张无忌

Unregistered / Unconfirmed
GUEST, unregistred user!
第42页的最后一句话:
  “。。。。。。在Object Pascal中,所有类实例都会有这么一个指向VMT的指针,如
果没有在类中声明虚方法,则该指针为nil。”
基本是对的,我测试过,这句话没有说清楚,应该是》VMT是存在的,不管有没有虚方法
他的下方是虚方法表,上方是动态方法指针和TObject的方法表,
 
F

firstrose

Unregistered / Unconfirmed
GUEST, unregistred user!
P13 我的理解:这是为了类的完整性。就是说,任何类都要遵循这个规范,TObject也
不例外。由于Create无实际内容,就写成空函数。
 
5

52free

Unregistered / Unconfirmed
GUEST, unregistred user!
这本书我看过,算是国人中的精品(注意是国人)
最起码不是那种一翻就给人似曾相识的感觉:P
 

小笨苯

Unregistered / Unconfirmed
GUEST, unregistred user!
欧,是吗?![?]
作者是hubdog吗?我很佩服他的呀!一会好好看看楼主的话。[:)]
 
H

helpme5

Unregistered / Unconfirmed
GUEST, unregistred user!
作者是金山公司毒霸组的申旻,也就是SUIPack控件包的作者。
我感觉书写的还是不错的,它主要谈的是个人的经验。
 
N

ndch

Unregistered / Unconfirmed
GUEST, unregistred user!
书写得很不错,正准备重看一次。

TObject.Create()在VCL中是空的,是因为它已经以汇编的形式存在于别处了,或者是以
语言环境内部支持的方式而存在着的吧?
 
D

dedema

Unregistered / Unconfirmed
GUEST, unregistred user!
空的就是空的吧!
至于构造函数的分配内存之存的动作,是由_ClassCreate这个函数来进行的。
这个函数将调用NewInstance这个函数来构造出对象所需的内存的。
 
W

wr960204

Unregistered / Unconfirmed
GUEST, unregistred user!
别说我钻牛角尖
OP所有的类一定派生自TObject吗?只能说VCL类库的类都派生自TObject。
但是OP是可以自定义基类的,例如有名的KOL类库就没用到TObject。
我们可以这样:
Type
TA=Object
end;
TB=Object(TA)
end;
....
其中TA就是凭空产生的,而TB继承自TA。

 
W

woyaoying

Unregistered / Unconfirmed
GUEST, unregistred user!
是啊~
我也有些地方不同意作者的观点~
我现在认为最好的书就是《Mastering Delphi6》。
这本书的作者真是太厉害了,方方面面介绍得非常全面。
刚开始作为初学者却是什么都看不懂,可是随着自己水平的提高,越看越认为书中蕴含着太多的宝藏了。
 
W

woyaoying

Unregistered / Unconfirmed
GUEST, unregistred user!
还有delphi5从入门到精通也是经典
 
S

shiningplus

Unregistered / Unconfirmed
GUEST, unregistred user!
delphi5开发指南很不错,我看了一年
 
D

dedema

Unregistered / Unconfirmed
GUEST, unregistred user!
Mastering Delphi6
哪里可以看到?书店还是电子书?
我倒认为<Delphi技术手册>倒是可以看看的。
 
D

delphiandoracle

Unregistered / Unconfirmed
GUEST, unregistred user!
Mastering Delphi6中文版让我看的吐血,我现在开始看英文版得了

 
Y

yanghaijun

Unregistered / Unconfirmed
GUEST, unregistred user!
我有 《Delphi3 从入门到精通》
《Delphi5 从入门到精通》
《Delphi6 从入门到精通》
都很不错,论述的内容不完全一样,有必要全部都看看,希望尽快看到
《Delphi7 从入门到精通》
《Kylix3 从入门到精通》
 
顶部