如标题.多谢大家了.

解决方案 »

  1.   

    看inside vcl啊,写的很明白的嘛!
      

  2.   

    VMT在OO中作用是极其重要的,研究这个可比较难,老兄还是慢慢看Inside Vcl吧,多看几遍,VMT看懂了,你也许就知道了OO的实现原理
      

  3.   

    虚拟方法表啊,virtual method table
    就是记载父类和子类的虚拟方法的一个表格,对于虚拟方法,在delphi里面有virtual和dynamic 2个关键字,virtual记载了父类和子类的所以虚拟方法,因为这样它调用虚拟方法就很快,但是占用内存多啊,因为保存了,子类和父类的所有虚拟方法啊,这样的话,如果继承层次很多的话,那么底层的子类的vmt一定会很大的,为了应付这种毛病,和缺陷,borland发明了dynamic ,动态方法,这个东西的类,只保存自身的vmt,保存自身的虚拟方法,而不保存父类的虚拟方法!!这样虽然节省了内存,但是调用效率慢了一点,因为如果要调用父类的虚拟方法的话,还要向上找寻父类的vmt,不象前面的子类,自己找寻虚拟方法!!
      

  4.   

    我觉得VMT就是一个数据结构, 就是一个地址链表.通过子类可以跳转到父类的VMT,也就是子类的VMT有父类的VMT的地址.
      

  5.   

    ttoth12(borlander) 说的对,一个类实例在堆上分配空间之后,其前四个字节所存储的,就是一个指向虚拟方法表(VMT)的指针,VMT对子类来说,它除了存储子类的方法(override的和普通的)地址外,还写入了所继承的父类的未被override的方法的入口地址,这种方法好处是调用到父类方法时非常快,缺点是类层深则其越大,内存占用当然也会多;所以Borland又搞出一个动态方法表(DMT),它不会存储父类未被override的方法地址,而在其VMT偏移地址-48处存储一指向其DMT指针,这样若调用父类方法,则要一层一层向上找,效率自不能同VMT比,却节省不少空间,是以其类中不常用之虚方法定义成dynamic是更好,其与virtual各有长短