构造函数能重载吗(50分)

  • 主题发起人 主题发起人 soso
  • 开始时间 开始时间
S

soso

Unregistered / Unconfirmed
GUEST, unregistred user!
在D中构造函数能重载吗?我指的是统一各类中,而不是继承类与祖先之间的重载,比如是否可以有几个create,如
TClass.Create(i : Integer);
TClass.Create(s : String);
 
delphi中几个create就不行了,构造函可以多哥,但是名字要不同,比如
constructor Create
constructor CreateNew
constructor New
 
可以从载:
TMyClass=class
constructor Create(i : Integer);overload;
construcrtor Create(s : String);overload;
{....}
end;

不过要注意,重载的函数必须参数类型不同,或个数不同。
 
Delphi3(Delphi2,我记不太清楚了)以前不支持同名函数重载!
 
如果他是有父类的,他的父类有create的,他的父类的create又没有定义overload
你这个类又想用create这个名字来overload,就不行了
第1次出现就要定义为overload。
 
To Pipi.
可以啦,至少在Delphi4下可以(我刚试过)
T1=class
constructor Create(Value:real);
end;

T2=class
constructor Create(Value:integer);overload;
constructor Create(Value:string);overload;
end;
 
To Pipi.
可以啦,至少在Delphi4下可以(我刚试过)
T1=class
constructor Create(Value:real);
end;

T2=class(T1)
constructor Create(Value:integer);overload;
constructor Create(Value:string);overload;
end;

 
记得Dos下实现很方便,如果是纯文本的话,
typedo
c.txt >> prn
所以干脆就用WinExec调用Dos命令好了。
 
Sorry,答错地方了。
 
昨天我试的时候不行,可能搞错了点东西,可能太晚睡觉,......
 
刚提出这个问题我就后悔了,因为我也成功了,方法同沈兄.不过第一次没有成功,因为我用的是override,所以我想请问各位高手,override 和 overload 有和区别
 
override就是要参数和父类完全一样的
overload就是可以使用一样的函数名,不一样的参数类型
 
overload是重载,用相同的函数,不同的参数,
override 是 对付多态的,子类的实现与父类的实现不同,
但都是同一个方法,参数是一样的,对用户来说,调用的都是
一个方法。
 
果然高手不少,还是关于重载的问题,如下:
TBase = class(TObject)
public
function Foo(const v : TBase):TBase;overload
end;

THerit = class(TBase)
public
function Foo(const v : THerit):THerit;overload
end;

而他们的实现是一模一样的,请问如何做,重写一便吗?还是用类型转换,我总感觉这样不安全

 
function THerit.Foo(const v : THerit):THerit;overload;
begin
result:= inherited Foo(v);
end;
 
实现是一样的,更本不用了。
TBase = class(TObject)
public
function Foo(const v : TBase):TBase;overload
end;

THerit = class(TBase)
public
end;

功能更上面一样
 
对不起,没看青题目。

To Pipi.
应为:
function THerit.Foo(const v : THerit):THerit;
begin
result:= inherited Foo(v) as THerit;
end;
 
好象delphi中,函数返回对象并不好,是吧,因为对象必须在函数体内创建,而又在调用后才删除,因此使用时不创建,只删除,封装性差。因此是不是应该改成过程,用参数传进去,虽然有时不直观,是不是也只能如此。
 
所谓对象,只是一个指针。 况且 delphi 返回对象的例子不少。
对象可以在任何一个地方创建(手动),要不发生异常或内存漏洞,
最后都得手动 free.
 
多人接受答案了。
 
后退
顶部