overload 与 override有何区别,请执教?(50分)

  • 主题发起人 主题发起人 cjfandhf
  • 开始时间 开始时间
C

cjfandhf

Unregistered / Unconfirmed
GUEST, unregistred user!
overload 与 override有何区别,请执教?
 
我不是很清楚,但是使用了overload后,好象两个函数可以并存,但是
override是覆盖原来的,就是原来的调用不到了。
 
好象不是吧。

overload相当于C++中的重载

不同参数的同名函数,调用时,通过参数区分。

而override是重写。

在重写的函数体内,应该可以用inherited调用父亲的函数吧。
 
能不能再详细解释一下override和reintroduce的区别?
 
g:hustmouse
reintroduce:它能够抑制编译器对于隐藏以前声明虚拟方法的警告.
用户可以在想用一个新方法隐藏一个继承的虚拟方法时使用reintroduce指令.
 
两个函数同名但参数不同时使用overload以使系统承认它们是合法的。
而override只用于类方法中,当子类继承了父类的同名同参数方法时使用
override.(当然父类的方法必须有virtual说明)。如果在写子类方法中不用
override说明,则在把子类对象作为父类类型调用时就会调用父类的方法而不是
你想要的子类的方法,举个例子
type
classa = class
public
function aaa:integer
virtual
//function 1
...
end;

classb = class(classa)
...
function aaa:integer
override
//function 2
end;
...
var
c1: classa;
i: integer;
begin
c1 := classb.create;
i := c1.aaa;
edit1.text := inttostr(i);
end;

注意到,上例中c1.aaa调用的是function 2,如果没有override则是
调用的function 1.
 
我同意XiaoWind得逞的说法
 
XiaoWind的“类方法”可能引起误解,类方法是“class"打头的方法;
overload and override 体现了多态,
overload 相当于C++中的重载,即在编译期 ,通过‘参数’实现静态多态
override 是多态的精髓,相当于C++中的虚拟方法,动态联编,
即在运行期,通过’虚拟方法表‘实现动态多态
不理解多态,等于没学c++ or object Pascal
search some books about oop









































 
Hi, cjfandhf
My name is Jams.
今日从书店相遇确实难得, 那里的D书里有较详细的讲解.

请E-mail联系!
 
hbffff的说法是正确的.
Overload与C++中的重载是相同的。
而Override 用于派生类对父类方法的继承,类似于C++中的虚拟函数的概念。在父类中声明
为Virtual的方法,在派生类中有不同实现时可以用Override,另外在实现中可以用
Inherited来保留父类中的功能。可以说Override是用于表现对象的多态性的。与Dynamic
声明一样,都是动态绑定的方法。
 
overload是重载方法函数
而override是覆盖基类虚方法。
 
xiaowind说的是!
但如果
begin
c1 := classA.create;
...
end;
则该执行哪个呢?!(见笑)
 
应该执行的是function 1,因为你此时创建的是ClassA的对象,ClassA是ClassB的父类,
它不可能知道它的子类的方法。在中文翻译中有的将overload翻成“过载”,而将override
翻成“重载”。override使一个方法在不同的派生类之间表现出不同的行为,同时这个方法
必需是虚拟的或是动态的。而overload是使一个类中可以有多个同名但不同参数的方法。
 
D4技术内幕里有详尽的解释,Overload 是函数名的重载,同一函数名带不同的参数,
就视为不同的函数;而 Override 则是在子类中,重写父类声明为 Virtual 的函数。
 
Crab is right.
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部