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。
欢迎讨论。
写在下面表达的只是个人的见解而己:
第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。
欢迎讨论。