重载和多态问题!欢迎讨论(补分帖) 参与过http://expert.csdn.net/Expert/topic/2064/2064895.xml?temp=.8615991的朋友进来领分,呵呵。如果哥们没过足瘾,可以在这里继续讨论。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 ps:我的qq:38009009msn:[email protected]很高兴结识各位朋友。 里面很多人连多态的概念都没有搞懂就乱起哄,这样会让别人误解的,老外看了会笑掉大牙的。其实道理都非常简单,两个关键字override和overload;override是覆盖基类虚方法和纯虚函数的一个关键字,用它可以实现多态。可以这么想,一个形状类为一个抽象类,我们肯定想把它Paint到屏幕上,但是对于形状可以有很多很多中,比如圆,正方形,三角形这些,我们可以定义一个抽象类,它具有这些不同形状的相同性质,比如都有一个Paint方法,然后我们再在派生类中覆盖Paint方法,写出相信的Paint方法的代码,那么对于我们后面使用只需要声明一个抽象类对象,但是却去创建一个派生类对象(你创建圆的派生类对象)调用paint方法的时候就是调用派生类对象的方法。而overload紧紧就是简单的函数重载关键字,只需要记住,只要是同名函数,参数类型或者参数数量不同,在两个函数的结尾加上overload关键字,给两个函数相应的实现,你在调用函数的时候就会调用相应的函数了!这个关键字更加深层次的解释我就不再赘述了。麻烦! 我发现怎么大家搞了半天还没弄懂overload 与 override的区别overload 就不用讨论了吧, 白痴都可明白的, 通俗一点就是一种方法多种实现, 它是一种平级的关系, 跟类没有根本的或直接的关系, 下面就是重载procedure Hello(AStr: string); overload;procedure Hello(AStr1, Astr2: string); overload;procedure Hello(AStr1, Astr2, AStr3: string); overload;override 说法也有很多种,覆盖,重置,也有讲重载的(我认为这样翻译也没错, 虽然这个词被 overload占了),它在面向对象中是一种扬弃的思想, 就是弃其糟粕, 取其精华。 父亲给儿子的, 儿子可以取舍, 就是这种观点 它跟方法怎么继承没多大关系(可能用词不好), 继承是通过Inherited来实现 , 它最大的体现就在动态联编上大家分几种情况来练习一下, 首先类的定义如下7种, 类的实现部分在最后, 我相信通过这个练习大家基本上都可以弄懂了1。 TAnimal = class public procedure Shout; end; TDog = class(TAnimal) public end;2。 TAnimal = class public procedure Shout; end; TDog = class(TAnimal) public procedure Shout; end;3。 TAnimal = class public procedure Shout; end; TDog = class(TAnimal) public procedure Shout; overload; end;4。//这个实际上是通不过的 TAnimal = class public procedure Shout; end; TDog = class(TAnimal) public procedure Shout; override; end;5。 TAnimal = class public procedure Shout; virtual; end; TDog = class(TAnimal) public procedure Shout; end;6。 TAnimal = class public procedure Shout; virtual; end; TDog = class(TAnimal) public procedure Shout; overload; end;7。 TAnimal = class public procedure Shout; virtual; end; TDog = class(TAnimal) public procedure Shout; override; end;最后类的实现部分如下procedure TAnimal.Shout;begin ShowMessage('I am a animal');end;procedure TDog.Shout;begin ShowMessage('I am a Dog');end;procedure TForm1.Button1Click(Sender: TObject);var dog: TDog;begin dog := TDog.Create; dog.Shout; dog.Free;end;procedure TForm1.Button2Click(Sender: TObject);var dog: TAnimal;begin dog := TDog.Create; dog.Shout; dog.Free;end;大家试试吧唉又浪费我一个小时 to:DWGZ() ,从大家的回复来看,我觉得大家都理解其中的道理,只是我们有的时候表达自己思想的时候有些&*(&*(, 不然我上一个帖子也不会结。这个帖子是散分用的,呵呵。非常感谢你的总结! 呵呵,FrameSniper(凤凰是否真的能够涅磐?) ,你做了突出的贡献,所以一定会给你多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多分的。 delphi调用dll问题 sndPlaySound(tada, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);那三个参数是什么含义?应该怎么用? 基础问题2个,先来先得! 在Delphi里如何取得SQL Server存储过程的输出参数的值? 几个问题,急!!!! 这条sql该怎么写 请问如何删除安装好的包? 关于Richedit和 edit 混合打印的问题 DLL高手请入,关于在DLL中引出对象的问题?????? 各路大侠!WPS97/2000文件口令忘记后如何解开????? 关于ListView中行的颜色控制问题,高手请帮忙。 关闭子窗口的问题。在线
msn:[email protected]
很高兴结识各位朋友。
override是覆盖基类虚方法和纯虚函数的一个关键字,用它可以实现多态。可以这么想,一个形状类为一个抽象类,我们肯定想把它Paint到屏幕上,但是对于形状可以有很多很多中,比如圆,正方形,三角形这些,我们可以定义一个抽象类,它具有这些不同形状的相同性质,比如都有一个Paint方法,然后我们再在派生类中覆盖Paint方法,写出相信的Paint方法的代码,那么对于我们后面使用只需要声明一个抽象类对象,但是却去创建一个派生类对象(你创建圆的派生类对象)调用paint方法的时候就是调用派生类对象的方法。
而overload紧紧就是简单的函数重载关键字,只需要记住,只要是同名函数,参数类型或者参数数量不同,在两个函数的结尾加上overload关键字,给两个函数相应的实现,你在调用函数的时候就会调用相应的函数了!
这个关键字更加深层次的解释我就不再赘述了。麻烦!
procedure Hello(AStr: string); overload;
procedure Hello(AStr1, Astr2: string); overload;
procedure Hello(AStr1, Astr2, AStr3: string); overload;
override 说法也有很多种,覆盖,重置,也有讲重载的(我认为这样翻译也没错, 虽然这个词被 overload占了),它在面向对象中是一种扬弃的思想, 就是弃其糟粕, 取其精华。 父亲给儿子的, 儿子可以取舍, 就是这种观点
它跟方法怎么继承没多大关系(可能用词不好), 继承是通过Inherited来实现 , 它最大的体现就在动态联编上
大家分几种情况来练习一下, 首先类的定义如下7种, 类的实现部分在最后, 我相信通过这个练习大家基本上都可以弄懂了
1。
TAnimal = class
public
procedure Shout;
end; TDog = class(TAnimal)
public
end;
2。
TAnimal = class
public
procedure Shout;
end; TDog = class(TAnimal)
public
procedure Shout;
end;
3。
TAnimal = class
public
procedure Shout;
end; TDog = class(TAnimal)
public
procedure Shout; overload;
end;
4。//这个实际上是通不过的
TAnimal = class
public
procedure Shout;
end; TDog = class(TAnimal)
public
procedure Shout; override;
end;5。
TAnimal = class
public
procedure Shout; virtual;
end; TDog = class(TAnimal)
public
procedure Shout;
end;
6。
TAnimal = class
public
procedure Shout; virtual;
end; TDog = class(TAnimal)
public
procedure Shout; overload;
end;
7。
TAnimal = class
public
procedure Shout; virtual;
end; TDog = class(TAnimal)
public
procedure Shout; override;
end;最后类的实现部分如下procedure TAnimal.Shout;
begin
ShowMessage('I am a animal');
end;procedure TDog.Shout;
begin
ShowMessage('I am a Dog');
end;procedure TForm1.Button1Click(Sender: TObject);
var
dog: TDog;
begin
dog := TDog.Create;
dog.Shout;
dog.Free;
end;procedure TForm1.Button2Click(Sender: TObject);
var
dog: TAnimal;
begin
dog := TDog.Create;
dog.Shout;
dog.Free;
end;大家试试吧唉又浪费我一个小时
这个帖子是散分用的,呵呵。
非常感谢你的总结!