Delphi 中﹐一个值得思索的问题…………
看如下代码﹕
type
Tfrmlookup = class(TForm)
procedure free();overload;
该类本身就继成了TForm 中的free 过程 ,为何我定义一个
Free ﹐程序编译不出错﹐如果是重载﹐那至少参数是不一样的﹐才可以区分出来啊﹐不知道delphi中这方面与c++有哪些区别﹐我的理解是﹕
对于同名的函数﹐static 只可overload , 但virtual 与dynamic 可overload 与override ,但overload 时其参数可用于区别
看如下代码﹕
type
Tfrmlookup = class(TForm)
procedure free();overload;
该类本身就继成了TForm 中的free 过程 ,为何我定义一个
Free ﹐程序编译不出错﹐如果是重载﹐那至少参数是不一样的﹐才可以区分出来啊﹐不知道delphi中这方面与c++有哪些区别﹐我的理解是﹕
对于同名的函数﹐static 只可overload , 但virtual 与dynamic 可overload 与override ,但overload 时其参数可用于区别
解决方案 »
- 我在DLL中建立了一个TImage,但调用时出现错误"Cannot assign a TFont to a TFont"
- 关于静态调用dll的问题
- DELPHI如何调用GetWindowThreadProcessId?
- 用delphixe如何写sql server2008可调用的dll
- 关于INPUTBOX的小问题,在线等结帖
- 请问各位如何在Delphi中调用VB编的ActiveX DLL?我的DLL在Delphi中找不到函数入口点。
- intraweb使用模块的问题
- 学习DELPHI还有必要吗?请介绍一下DELPHI还有多少人用?
- 鸽子1.23 生成错误卡死提示,寻求解决方法
- 如何设置超时??求救,急!!!
- 后台线程调用 WEB 服务怎么老是提示"尚未调用 CoInit...."?
- Delphi 中﹐数据集的定位问题………
procedure free () ;override; 是提示﹐free 是static 函數。
我只是說是free 是static函數 ﹐為何overload時﹐參數一模一樣,編譯時卻不出錯。急請高手講解講解..可能delphi與c++中有所區別.............
procedure free();overload; 相当于在Tfrmlookup 的名空间中重新定义了free这个函数,与TForm中的free函数不相干,而不管它是不是static函数。
對于
Tfrmlookup = class(TForm)
procedure free();
delphi 的處理 就好像泊來品與自制品一樣, 如果tfrmlookup 本身自制一個free ﹐那inherid的就
不用了﹐而 procedure free() ;overload ; ,如果參數不一樣﹐則保留inherid 的free ,
Tfrmlookup = class(TForm)
procedure free();
不是这样的。对于Tfrmlookup.Free,调用的是自己的FREE函数。
但如果TForm类内部某个函数调用Free,调用的仍然是TFOrm.Free。而如果
procedure free(); override; (假设它编译通过)
TForm类内部某个函数调用Free,调用的是Tfrmlookup.Free。这就是虚函数+重载机制意义所在。