高手请进来。(50分)

吴明星

Unregistered / Unconfirmed
GUEST, unregistred user!
难得一见左轻侯,左老师也请我指教
 
W

wjiachun

Unregistered / Unconfirmed
GUEST, unregistred user!
我也该看书去了,只有个模糊的认识
 
K

kenmen

Unregistered / Unconfirmed
GUEST, unregistred user!
OVERRIDE与覆盖的用法一样吗?
我记得在c++里OVERRIDE是叫重定义的。。。。
用法大致与笑傲江湖说的覆盖一样。
 
K

kenmen

Unregistered / Unconfirmed
GUEST, unregistred user!
有人在吗?
 
W

wjiachun

Unregistered / Unconfirmed
GUEST, unregistred user!
提问者:
如果你还要继续讨论请定期提前你的帖子,如果不想继续讨论请结束帖子。
请认真阅读大富翁论坛规则说明 http://www.delphibbs.com/delphibbs/rules.asp
 
K

kenmen

Unregistered / Unconfirmed
GUEST, unregistred user!
我想再等等。。。
 
C

ColorOfWind

Unregistered / Unconfirmed
GUEST, unregistred user!
override与覆盖当然不同,override一般是与多态性联系在一起的,给你一个《Delphi4编
程技术内幕》中的例子,如下
unit main;

interface

uses
Windows, Messages, SysUtils,
Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls;

type
TForm1 = class(TForm)
bPolymorph: TButton;
procedure bPolymorphClick(Sender: TObject);
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

type
TParent = class(TObject)
procedure Draw
virtual;
end;

TChild = class(TParent)
procedure Draw
override

procedure ShowHierarchy
virtual;
end;

procedure TParent.Draw;
begin
ShowMessage('Parent Draw');
end;

procedure TChild.Draw;
begin
ShowMessage('Child Draw');
end;

procedure TChild.ShowHierarchy;
begin
ShowMessage('Child Show Hierarchy');
end;

procedure CallDraw(O: TParent);
begin
O.Draw;
end;

procedure FreeObject(O: TObject);
begin
O.Free;
end;

procedure TForm1.bPolymorphClick(Sender: TObject);
var
Child: TChild;
Parent: TParent;
begin
Child := TChild.Create;
Parent := TParent.Create;
CallDraw(Parent);
CallDraw(Child);
FreeObject(Child);
FreeObject(Parent);
end;

end.
这个例子说明了override在多态性中的作用。
我只说明一下,如果子类中的方法没有声明为override,则在子类的实例中直接调用此方法时
,就会覆盖掉父类中的同名方法。但是,上面的情况下,如果TParent中的Draw不是virtual,
TChild的Draw没有override,则调用的将是父类中的同名方法,哪怕是用子类的一个实例去
调用。你自己运行体会一下。

至于这个问题:那类方法与普通的类中定义的方法用法上有啥不同?
回答如下,类方法可以在类的实例没有创建的时候就引用。由于类方法不依赖于任何对象
实例,因此,类方法的代码不能访问类的字段。其实很多类方法,如ClassName、ClassParent、
ClassInfo等等,都是用来取得运行期类型信息(RTTI)的,因为这些信息独立于对象实例,
是相对固定的。
在类方法中,除了一般的参数外,实际还隐含传递了一个叫SELF的参数,这个参数代表
声明这个类方法的类。。SELF是一个类,不是对象,因此不能用SELF访问类的字段、特性和
一般的方法,但可以用SELF来引用类的构造和其他类方法。
类方法也可以由对象实例来引用,这时,SELF参数传递的是对象实例的类。

OK?
 

温柔一刀

Unregistered / Unconfirmed
GUEST, unregistred user!
//faint!!!

小左同志,你也真够狠,说了一句就没信儿了?
以前还说我,嘿嘿。。。
 

左轻侯

Unregistered / Unconfirmed
GUEST, unregistred user!
大富翁的邮件通知经常赶不上趟
我那篇文章早贴出来了,挨了顿骂
http://www.delphibbs.com/delphibbs/dispq.asp?lid=501133
 

温柔一刀

Unregistered / Unconfirmed
GUEST, unregistred user!
哦,是啊,那文章我明明早就看见。。。
在这里贴个连接就好了嘛。。。。
 
K

kenmen

Unregistered / Unconfirmed
GUEST, unregistred user!
左老师,我终于看到你的文章了。很感动!!!!!!!!!
请问有详细点吗?有的话请寄给我。谢了!!!!!!!!!
还有我不能另存为,这是大富翁的问题吗?
 
K

kenmen

Unregistered / Unconfirmed
GUEST, unregistred user!
左老师,我买了本《delphi5.0开发人员指南〉
请问你看过吗?觉得怎样?
 

左轻侯

Unregistered / Unconfirmed
GUEST, unregistred user!
不好意思,目前就这么多啦
大富翁用的xml,另存不行,你直接select &amp
copy一下就是了
如果你说的是机械工业那本,很不错的
 
K

kenmen

Unregistered / Unconfirmed
GUEST, unregistred user!
谢谢左老师了。。。。
以后能再问你吗?
 
K

kenmen

Unregistered / Unconfirmed
GUEST, unregistred user!

风中的沙粒

Unregistered / Unconfirmed
GUEST, unregistred user!
to ColorOfWind
真牛,实践出真知,我以前也很迷惑,既然有重载,还要覆盖和重定义干吗
试了试,你讲得比较对,delphi6根本没了覆盖,如果不用virtual,overload,
来是会调用父类中的方法,所以大家要定义父类时,想子类多太的话,一定要用overload
 

Similar threads

回复
0
查看
662
不得闲
回复
0
查看
851
不得闲
D
回复
0
查看
692
DelphiTeacher的专栏
D
D
回复
0
查看
599
DelphiTeacher的专栏
D
D
回复
0
查看
595
DelphiTeacher的专栏
D
顶部