DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: tino0914
今日帖子: 31
在线用户: 11
导航: 论坛 -> 论坛精华贴 斑竹:liumazi,iamdream  
作者:
女 hfmengyu2000 (筱箫) ★☆☆☆☆ -
普通会员
2004/4/28 14:51:35
标题:
Delphi国际程序员认证考试试题 浏览:6179
加入我的收藏
楼主: 要覆盖一个虚拟方法,必须指定相同的参数并使用关键字override。
这句话对吗?
----------------------------------------------
-
作者:
男 restboy (枫☆白水煮大虾) ★☆☆☆☆ -
盒子活跃会员
2004/4/28 15:01:10
1楼: 我想说是对的。。可这道题怎么看着象是一个套-_-....
楼主能给份完整的考题么?我想看看都有什么。
----------------------------------------------
夫君子之行,静以修身,俭以养德.非澹泊无以明志, 
非宁静无以致远.夫学须静也,才须学也,非学无以广才,
非志无以成学,淫漫则不能励精,险躁则不能治性,年与时驰, 
意与日去,遂成枯落,多不接世,悲守穷庐,将复何及!
作者:
男 bianfuxia888999 (bfx) ★☆☆☆☆ -
盒子活跃会员
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
作者:
男 restboy (枫☆白水煮大虾) ★☆☆☆☆ -
盒子活跃会员
2004/4/28 17:12:04
4楼: 受教了~
----------------------------------------------
夫君子之行,静以修身,俭以养德.非澹泊无以明志, 
非宁静无以致远.夫学须静也,才须学也,非学无以广才,
非志无以成学,淫漫则不能励精,险躁则不能治性,年与时驰, 
意与日去,遂成枯落,多不接世,悲守穷庐,将复何及!
作者:
男 restboy (枫☆白水煮大虾) ★☆☆☆☆ -
盒子活跃会员
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
作者:
男 restboy (枫☆白水煮大虾) ★☆☆☆☆ -
盒子活跃会员
2004/4/28 18:09:54
7楼: 明白了,非常感谢。
我对oop还是不很熟练,目前还只有看书而已,能否推荐一些习题之类的?我想多写一些代码会更有帮助。。。
----------------------------------------------
夫君子之行,静以修身,俭以养德.非澹泊无以明志, 
非宁静无以致远.夫学须静也,才须学也,非学无以广才,
非志无以成学,淫漫则不能励精,险躁则不能治性,年与时驰, 
意与日去,遂成枯落,多不接世,悲守穷庐,将复何及!
作者:
男 sephil (NAILY Soft) ★☆☆☆☆ -
盒子中级会员
2004/4/28 18:13:45
8楼: :)
----------------------------------------------
Copyright 2008 ? NAILY Soft

Click here to redirect to my home
Click here to redirect to my blog
作者:
男 bios (阿贡) ★☆☆☆☆ -
盒子中级会员
2004/4/28 20:13:56
9楼: < 你们很多 基本功不扎实!>
----------------------------------------------
按此在新窗口浏览图片
按此在新窗口浏览图片
作者:
男 bios (阿贡) ★☆☆☆☆ -
盒子中级会员
2004/4/28 20:14:44
10楼: sephil老大开个基本功专题讲座!不然实在受不了!
----------------------------------------------
按此在新窗口浏览图片
按此在新窗口浏览图片
作者:
男 sephil (NAILY Soft) ★☆☆☆☆ -
盒子中级会员
2004/4/28 20:25:55
11楼: 汗...
----------------------------------------------
Copyright 2008 ? NAILY Soft

Click here to redirect to my home
Click here to redirect to my blog
作者:
男 heavensoldier (5201314) ★☆☆☆☆ -
盒子活跃会员
2004/4/28 23:41:24
12楼: sephil大哥是如何学习delphi的啊,怎么如此凶呢,什么时候小弟才能达到这一步呢?
可以介绍几本好书学学吗?:)
----------------------------------------------
-
作者:
男 hgc2004 (MyLoveDelphi) ★☆☆☆☆ -
普通会员
2004/5/17 21:52:14
13楼:
按此在新窗口浏览图片

我也想知道,一定要努力
----------------------------------------------
-8165在线游戏-小游戏8165.cn在线小游戏
作者:
男 xiaochao325 (蓝梦影) ★☆☆☆☆ -
盒子活跃会员
2004/5/24 20:29:43
14楼: sephil大哥是如何学习delphi的啊,怎么如此凶呢,什么时候小弟才能达到这一步呢?
可以介绍几本好书学学吗?:)
----------------------------------------------
~~我是菜鸟,我想飞!~~
按此在新窗口浏览图片
欢迎所有喜欢和对DELPHI有强烈兴趣的朋友加入群:4163031
作者:
男 sephil (NAILY Soft) ★☆☆☆☆ -
盒子中级会员
2004/5/24 21:29:02
15楼: 多多练习
:)
----------------------------------------------
Copyright 2008 ? NAILY Soft

Click here to redirect to my home
Click here to redirect to my blog
作者:
男 hanbingxue2000 (寒冰雪) ★☆☆☆☆ -
普通会员
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
作者:
男 sephil (NAILY Soft) ★☆☆☆☆ -
盒子中级会员
2004/5/26 23:44:26
17楼: 是啊,我让你注释掉那一行,那你为什么没有注释掉呢?

procedure T2.T;
begin
  // inherited; // 如果你注释调这一行,那么实际上T1.T并没有被执行
  ShowMessage('T2');
end;

这样就不会了啊
难道是我写得还不够清楚???
----------------------------------------------
Copyright 2008 ? NAILY Soft

Click here to redirect to my home
Click here to redirect to my blog
作者:
男 hanbingxue2000 (寒冰雪) ★☆☆☆☆ -
普通会员
2004/5/27 0:09:50
18楼: haha
   估计是误会!!haha
----------------------------------------------
df
作者:
男 hanbingxue2000 (寒冰雪) ★☆☆☆☆ -
普通会员
2004/5/27 0:11:03
19楼: 上楼的兄弟
 
  留个qq呀
不方便的话
 加小弟
 115442109
  我要请教呀
----------------------------------------------
df
作者:
男 sephil (NAILY Soft) ★☆☆☆☆ -
盒子中级会员
2004/5/27 0:21:47
20楼: 63779403
只是上得少
----------------------------------------------
Copyright 2008 ? NAILY Soft

Click here to redirect to my home
Click here to redirect to my blog
作者:
男 zinc (art) ★☆☆☆☆ -
盒子活跃会员
2004/5/27 20:15:07
21楼: 我觉得是对的,请问楼主可否把试题给小弟一览,谢谢!
----------------------------------------------
-互相学习
作者:
男 cxjkx (想飞的菜鸟) ★☆☆☆☆ -
盒子活跃会员
2004/8/18 12:45:26
22楼: 你们太厉害了,我看起来头痛
----------------------------------------------
-
作者:
女 seowhy123456 (seowhy123456) ▲▲▲▲▲ -
禁用账号
2011/8/1 22:08:59
24楼: ……
被禁用帐号,帖子内容自动屏蔽!
……

----------------------------------------------
发布广告,禁用帐号!
作者:
男 liuyashao (liuyashao) ★☆☆☆☆ -
盒子活跃会员
2011/8/4 0:16:43
25楼: 要覆盖一个虚拟方法,必须指定相同的参数并使用关键字override
--是对的。
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行93.75毫秒 RSS