初学者请教有关对象的多态性.... 书上讲的太抽象,请各位前辈用通俗的语言解释一下对象的对态性。最好附上实例。多谢啦! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 多态性的定义:对数据的操作可在不同的时间内保存、取用以及返回不同的类型值。多态性包括三方面: 运算符的重载:指同一运算符可以作用在多种对象类型上,包括用户定义的类型。 函数名重载:指相同函数名可以作用在不同的对象类型上,并产生不同的效果。 虚函数与动态联编:当重载的函数名前加 virtual标识符时,改函数称虚函数,它具有较大的灵活性,允许在运行时而非编译时按具体数据类型和参量来确定选用哪个函数,这种方式称为动态联编。 Type TDog=Class private public procedure Call;Virtual; end; TYellowDog=Class(TDog) public procedure Call;Override; end; TBlackDog=Class(TDog) public procedure Call;Override; end;procedure TForm1.Button1Click(Sender: TObject);var DogList:Array[0..2] of TDog; i:integer;begin DogList[0] :=TYellowDog .Create ; DogList[1] :=TBlackDog .Create ; DogList[2] :=TYellowDog .Create ; for i:=0 to 2 do DogList[i].Call ; //看起来调用的是父对象的过程,可执行的确是不同的子类的代码,TDog是一个抽象的类所有的狗都会叫,你只要让狗叫就可以了,不用区分它是黄狗还是黑狗,黄狗自己会确定自己如何叫,黑狗也会有黑狗它自己的叫法。end;{ TYellowDog }procedure TYellowDog.Call;begin inherited; Showmessage('黄狗叫');end;{ TBlackDog }procedure TBlackDog.Call;begin inherited; Showmessage('黑狗叫');end;{ TDog }procedure TDog.Call;beginend; 这个帖子http://expert.csdn.net/Expert/topic/2064/2064895.xml?temp=.8297541 我想问一下delphi有运算符重载吗?那好像是c++的东西吧 同意 ZyxIp(绝望中...) 的 1111被一帮光棍敲诈要我散分 VPN跑CS构架速度慢怎么办? 能否把SQL 里面用的类型与TQUERY.field.datatype对应起来 100分求Sql语句。up有分 mdi 加背景图片,如何图片不平铺 DBCombobox问题。 vclzip的分卷压缩问题 菜鸟问题:请问怎么声明日期、时间型变量? 陶杯(Delphi)有奖问答 "DAX ERROR"??? 如何让iwtext每一行显示的文字都具有超链接功能?(intraweb) SetWindowPos参数发送给form1.handle就可以,form2.handle就没作用了?救命啊!
多态性包括三方面: 运算符的重载:指同一运算符可以作用在多种对象类型上,包括用户定义的类型。
函数名重载:指相同函数名可以作用在不同的对象类型上,并产生不同的效果。
虚函数与动态联编:当重载的函数名前加 virtual标识符时,改函数称虚函数,它具有较大的灵活性,允许在运行时而非编译时按具体数据类型和参量来确定选用哪个函数,这种方式称为动态联编。
TDog=Class
private
public
procedure Call;Virtual;
end;
TYellowDog=Class(TDog)
public
procedure Call;Override;
end;
TBlackDog=Class(TDog)
public
procedure Call;Override;
end;procedure TForm1.Button1Click(Sender: TObject);
var
DogList:Array[0..2] of TDog;
i:integer;
begin
DogList[0] :=TYellowDog .Create ;
DogList[1] :=TBlackDog .Create ;
DogList[2] :=TYellowDog .Create ; for i:=0 to 2 do
DogList[i].Call ;
//看起来调用的是父对象的过程,可执行的确是不同的子类的代码,TDog是一个抽象的类所有的狗都会叫,你只要让狗叫就可以了,不用区分它是黄狗还是黑狗,黄狗自己会确定自己如何叫,黑狗也会有黑狗它自己的叫法。end;{ TYellowDog }procedure TYellowDog.Call;
begin
inherited;
Showmessage('黄狗叫');
end;{ TBlackDog }procedure TBlackDog.Call;
begin
inherited;
Showmessage('黑狗叫');
end;{ TDog }procedure TDog.Call;
beginend;
http://expert.csdn.net/Expert/topic/2064/2064895.xml?temp=.8297541
delphi有运算符重载吗?那好像是c++的东西吧