Delphi 中﹐一个值得思索的问题…………
看如下代码﹕
type
  Tfrmlookup = class(TForm)
    procedure free();overload; 
该类本身就继成了TForm 中的free 过程 ,为何我定义一个
Free ﹐程序编译不出错﹐如果是重载﹐那至少参数是不一样的﹐才可以区分出来啊﹐不知道delphi中这方面与c++有哪些区别﹐我的理解是﹕
对于同名的函数﹐static 只可overload , 但virtual 与dynamic 可overload 与override ,但overload 时其参数可用于区别

解决方案 »

  1.   

    可能free();是个纯虚函数吧,使用的时候用类名或名字空间
      

  2.   

    回復樓上﹕
    procedure free () ;override; 是提示﹐free 是static 函數。
      

  3.   

    废话,难道 static 的函数,你还要 override ?
      

  4.   

    回復樓上﹕
    我只是說是free 是static函數 ﹐為何overload時﹐參數一模一樣,編譯時卻不出錯。急請高手講解講解..可能delphi與c++中有所區別.............
      

  5.   

    delphi 的毛病多着呢,你管它呢,
      

  6.   

    Tfrmlookup = class(TForm)
        procedure free();overload; 相当于在Tfrmlookup 的名空间中重新定义了free这个函数,与TForm中的free函数不相干,而不管它是不是static函数。
      

  7.   

    实际上,这样的写法,有没有overload是一样的。(当然,如果你要定义一个不同函数的free,还是要overload。)
      

  8.   

    回復樓上﹕
    對于
    Tfrmlookup = class(TForm)
        procedure free(); 
    delphi 的處理 就好像泊來品與自制品一樣, 如果tfrmlookup 本身自制一個free ﹐那inherid的就
    不用了﹐而 procedure free() ;overload ; ,如果參數不一樣﹐則保留inherid 的free ,
      

  9.   

    to ghjin(爱的就是你) :
    Tfrmlookup = class(TForm)
        procedure free(); 
    不是这样的。对于Tfrmlookup.Free,调用的是自己的FREE函数。
    但如果TForm类内部某个函数调用Free,调用的仍然是TFOrm.Free。而如果
        procedure free(); override; (假设它编译通过)
    TForm类内部某个函数调用Free,调用的是Tfrmlookup.Free。这就是虚函数+重载机制意义所在。