请教各位网友,问个Delphi中virtual与override的问题:(0分)

  • 主题发起人 主题发起人 netbug
  • 开始时间 开始时间
N

netbug

Unregistered / Unconfirmed
GUEST, unregistred user!
请看:
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;

ta=class
s1:string;
constructor create;
procedure show;(或:procedure show;virtual;)
end;

tb=class(ta)
s2:string;
constructor create;
procedure show;(或:procedure show;override;)
end;
var
Form1: TForm1;
implementation
constructor ta.create;
begin
s1:='string';
end;
procedure ta.show;
begin
showmessage(s1);
end;
constructor tb.create;
begin
inherited;
s2:='type';
end;
procedure tb.show;
begin
inherited;
showmessage(s2);
end;
{$R *.DFM}
var x1:ta;x2:tb;
procedure TForm1.Button1Click(Sender: TObject);
begin
x1:=ta.Create;
x1.show;
x2:=tb.create;
x2.show;
end;
我想测试一下:用virtual、override与不用virtual、override的区别,
但我在以上程序中看不到用什么不同,请问我看如何做才能看到
必须用virtual、override?
谢谢。
 
procedure TForm1.Button1Click(Sender: TObject);
var
x1:ta;
begin
x1:=tb.Create;
x1.show;
end;
 
>var x1:ta;x2:tb;
问题出在这里,同意Hexi的procedure
 

呵呵,要明白类的多态性的话,请分别在下面语句的

x1.show;
x2.show;

两句设置断点,然后按F7键函数内单步运行,你就可以
发现类的多态性了,呵呵 :)

程序如下:
procedure TForm1.Button1Click(Sender: TObject);
var x1,x2:ta;
begin
x1:=ta.Create;
x1.show;
x2:=tb.create;
x2.show;
end;
 
继续请教:

TT1=class
public
constructor Create
virtual;
end;

TT2=class(TT1)
public
constructor Create
virtual;
end;

TT3=class(TT2)
public
constructor Create
override;
end;


这样的申明,当TT1.Create 时,是TT2的实例呢还是TT3的实例?

 
当然是 TT1 了,怎么会是 TT2 或 TT3 呢?

 
www.netbug.net.com 是你的主页?
 
首先,当一个方法声明为virtual的时候,
它的子类即使override了这个方法,
对于孙子类来说,这个方法仍旧是虚的!
当一个类的虚方法绑定的时候,沿着继承树向上搜寻,
知道找到第一个被override的方法,进行绑定.
 
认为lczhuohuo说的清楚。
SuperMMX,我的问题有误,对不起。
 
那么虚拟、抽象有什么实际用途,为什么要有这些?? 这是我一直没搞明白的,感觉
有它没它没什么不同。
 
to lczhuohuo
似懂非懂,能否再形象地说明一下?!
 
接受答案了.
 
后退
顶部