|
|
导航: |
论坛 -> 论坛精华贴
斑竹:liumazi,iamdream |
|
作者: |
|
2004/4/28 14:51:35 |
标题: |
Delphi国际程序员认证考试试题 |
浏览:6179 |
|
加入我的收藏 |
楼主: |
要覆盖一个虚拟方法,必须指定相同的参数并使用关键字override。 这句话对吗?
----------------------------------------------
- |
作者: |
|
2004/4/28 15:01:10 |
1楼: |
我想说是对的。。可这道题怎么看着象是一个套-_-.... 楼主能给份完整的考题么?我想看看都有什么。
----------------------------------------------
夫君子之行,静以修身,俭以养德.非澹泊无以明志, 非宁静无以致远.夫学须静也,才须学也,非学无以广才, 非志无以成学,淫漫则不能励精,险躁则不能治性,年与时驰, 意与日去,遂成枯落,多不接世,悲守穷庐,将复何及!
|
作者: |
|
2004/4/28 15:13:38 |
2楼: |
对呀,我也想看,传上来一份好吗
----------------------------------------------
-
|
作者: |
sephil (NAILY Soft) |
★☆☆☆☆ |
-
|
盒子中级会员 |
|
2004/4/28 15:56:45 |
3楼: |
不一定 可以用不同的参数,不过要声明为reintroduce
比如 type TParent = class protected procedure Doit; virtual; abstract; end;
TChild = class(TParent) protected procedure Doit(I: Integer); reintroduce; end;
----------------------------------------------
Copyright 2008 ? NAILY Soft Click here to redirect to my home Click here to redirect to my blog
|
作者: |
|
2004/4/28 17:12:04 |
4楼: |
受教了~
----------------------------------------------
夫君子之行,静以修身,俭以养德.非澹泊无以明志, 非宁静无以致远.夫学须静也,才须学也,非学无以广才, 非志无以成学,淫漫则不能励精,险躁则不能治性,年与时驰, 意与日去,遂成枯落,多不接世,悲守穷庐,将复何及!
|
作者: |
|
2004/4/28 17:32:47 |
5楼: |
帮助里面这么说 If you overload a virtual method, use the reintroduce directive when you redeclare it in descendant classes. For example,
type T1 = class(TObject) procedure Test(I: Integer); overload; virtual; end; T2 = class(T1) procedure Test(S: string); reintroduce; overload; end; ... SomeObject := T2.Create; SomeObject.Test('Hello!'); // calls T2.Test SomeObject.Test(7); // calls T1.Test 但是如果t1.test是virtual,那么实际上应该没有做处理吧。那么这段代码如果去掉virtual 和 下面的reintroduce应该运行效果是一样的吧?
----------------------------------------------
夫君子之行,静以修身,俭以养德.非澹泊无以明志, 非宁静无以致远.夫学须静也,才须学也,非学无以广才, 非志无以成学,淫漫则不能励精,险躁则不能治性,年与时驰, 意与日去,遂成枯落,多不接世,悲守穷庐,将复何及!
|
作者: |
sephil (NAILY Soft) |
★☆☆☆☆ |
-
|
盒子中级会员 |
|
2004/4/28 17:48:03 |
6楼: |
首先你的代码里面overload是多余的.overload不是在这里用的
其次Delphi重载函数实现时应该用inherited
比如 T1 = class public procedure T; virtual; end;
T2 = class(T1) public procedure T; override; end;
var Form1: TForm1;
implementation
{$R *.dfm}
{ T1 }
procedure T1.T; begin ShowMessage('T1'); end;
{ T2 }
procedure T2.T; begin inherited; // 如果你注释调这一行,那么实际上T1.T并没有被执行 ShowMessage('T2'); end;
procedure TForm1.FormCreate(Sender: TObject); var obj: T1; begin obj := T2.Create; obj.T; obj.Free; end;
如果你注释调T2.T里面的inherited,那么实际上你只能看见ShowMessage('T2')
//=================================================================
T1 = class public procedure T; virtual; end;
T2 = class(T1) public procedure T(S: string); reintroduce; end;
implementation
{$R *.dfm}
{ T1 }
procedure T1.T; begin ShowMessage('T1'); end;
{ T2 }
procedure T2.T(S: String); begin inherited T; ShowMessage(S); end;
procedure TForm1.FormCreate(Sender: TObject); var obj: T2; //这里不能声明为T1了 begin obj := T2.Create; obj.T('aa'); // 实际上你在这里可以看见ShowMessage('T1')和ShowMessage('aa'),表明T1.T也执行了 obj.Free; end;
看了上面的例子你就应该明白 Delphi里要重载函数不是光override就够了的
----------------------------------------------
Copyright 2008 ? NAILY Soft Click here to redirect to my home Click here to redirect to my blog
|
作者: |
|
2004/4/28 18:09:54 |
7楼: |
明白了,非常感谢。 我对oop还是不很熟练,目前还只有看书而已,能否推荐一些习题之类的?我想多写一些代码会更有帮助。。。
----------------------------------------------
夫君子之行,静以修身,俭以养德.非澹泊无以明志, 非宁静无以致远.夫学须静也,才须学也,非学无以广才, 非志无以成学,淫漫则不能励精,险躁则不能治性,年与时驰, 意与日去,遂成枯落,多不接世,悲守穷庐,将复何及!
|
作者: |
bios (阿贡) |
★☆☆☆☆ |
-
|
盒子中级会员 |
|
2004/4/28 20:13:56 |
9楼: |
< 你们很多 基本功不扎实!>
----------------------------------------------
|
作者: |
bios (阿贡) |
★☆☆☆☆ |
-
|
盒子中级会员 |
|
2004/4/28 20:14:44 |
10楼: |
sephil老大开个基本功专题讲座!不然实在受不了!
----------------------------------------------
|
作者: |
|
2004/4/28 23:41:24 |
12楼: |
sephil大哥是如何学习delphi的啊,怎么如此凶呢,什么时候小弟才能达到这一步呢? 可以介绍几本好书学学吗?:)
----------------------------------------------
-
|
作者: |
hgc2004 (MyLoveDelphi) |
★☆☆☆☆ |
-
|
普通会员 |
|
2004/5/17 21:52:14 |
13楼: |
我也想知道,一定要努力
----------------------------------------------
-8165在线游戏-小游戏8165.cn在线小游戏
|
作者: |
|
2004/5/24 20:29:43 |
14楼: |
sephil大哥是如何学习delphi的啊,怎么如此凶呢,什么时候小弟才能达到这一步呢? 可以介绍几本好书学学吗?:)
----------------------------------------------
欢迎所有喜欢和对DELPHI有强烈兴趣的朋友加入群:4163031
|
作者: |
|
2004/5/26 23:31:11 |
16楼: |
兄弟们,小弟感觉有点错误呀
procedure TForm1.FormCreate(Sender: TObject); var obj: T1; begin obj := T2.Create; obj.T; obj.Free; end;
如果你注释调T2.T里面的inherited,那么实际上你只能看见ShowMessage('T2') 这个多态,结果应该,是两个都有 应该执行下面的代码呀 procedure T2.T; begin inherited; // 如果你注释调这一行,那么实际上T1.T并没有被执行 ShowMessage('T2'); end;
----------------------------------------------
df
|
作者: |
|
2004/5/27 0:09:50 |
18楼: |
haha 估计是误会!!haha
----------------------------------------------
df
|
作者: |
|
2004/5/27 0:11:03 |
19楼: |
上楼的兄弟 留个qq呀 不方便的话 加小弟 115442109 我要请教呀
----------------------------------------------
df
|
作者: |
zinc (art) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2004/5/27 20:15:07 |
21楼: |
我觉得是对的,请问楼主可否把试题给小弟一览,谢谢!
----------------------------------------------
-互相学习
|
作者: |
cxjkx (想飞的菜鸟) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2004/8/18 12:45:26 |
22楼: |
你们太厉害了,我看起来头痛
----------------------------------------------
-
|
作者: |
|
2011/8/1 22:08:59 |
24楼: |
…… 被禁用帐号,帖子内容自动屏蔽! ……
----------------------------------------------
发布广告,禁用帐号!
|
作者: |
|
2011/8/4 0:16:43 |
25楼: |
要覆盖一个虚拟方法,必须指定相同的参数并使用关键字override --是对的。
----------------------------------------------
-
|
|