
04.01.2010, 23:55
|
Прохожий
|
|
Регистрация: 29.12.2008
Сообщения: 15
Репутация: 10
|
|
Способы реализации полиморфизма в Delphi
подскажите пожалуйста какой есть еще принцип реализации полиморфизма в Delphi. Есть 1) перекрытие(override)
2) перегрузка (overload)
Какие ещё есть способы ?
Вот код, где здесь реализация полиморфизма ?
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Unit2, Unit3;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
C:TChelovek;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
C.SetAll(Form1.Edit1.Text,Strtoint(Form1.Edit2.Text), Form1.Edit3.Text, StrToInT(Form1.Edit4.Text)) ;
C.Age;
Form1.Memo1.Lines.Add(C.Describe);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
C:=TChelovek.Create;
C.SetAll('Èâàíîâà', 1991, 'Åëåíà', 14);
C.Age;
Form1.Memo1.Lines.Add(C.Describe);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
C.Free;
end;
end.
unit Unit2;
interface
uses SysUtils, Dialogs, DateUtils;
type
THuman=class
private
FAge:integer;
Ffam:string;
FGod_rozd:integer;
function GetFfam:string;
procedure SetFfam(Ff:string);
function GetFGod_rozd:integer;
procedure SetFGod_rozd(FGR:integer);
public
Function GetFAge:integer;
procedure Age;
function Describe:string;
procedure SetAll(fam:string;god:integer);
property Ffams:string read GetFfam
write SetFfam;
property FGod_rozds: integer read GetFGod_rozd
write SetFGod_rozd;
end;
implementation
function THuman.GetFfam:string;
begin
GetFfam:=Ffam;
end;
procedure THuman.SetFfam(Ff:string);
begin
Ffam:=Ff;
end;
function THuman.GetFGod_rozd:integer;
begin
GetFGod_rozd:=FGod_rozd;
end;
procedure THuman.SetFGod_rozd(FGR:integer);
begin
FGod_rozd:=FGR;
end;
procedure THuman.Age;
begin
FAge:=YearOf(Date)-FGod_rozd;
end;
function THuman.GetFAge:integer;
begin
GetFAge:=FAge;
end;
function THuman.Describe:string;
begin
Describe:='Ôàìèëèÿ - '+Ffam+' '+'Ãîä ðîæäåíèÿ - '+IntToStr(FGod_rozd)+' '+' Âîçðàñò - '+IntToStr(FAge)+' ';
end;
procedure THuman.SetAll( fam:string; god:integer);
begin
Ffam:=fam;
FGod_rozd:=god;
Age;
end;
end.
unit Unit3;
interface
uses SysUtils, Dialogs, Unit2;
type
TChelovek=class(THuman)
private
FImya:string;
Fnomer:integer;
function GetFImya:string;
procedure SetFImya(FI:string);
function GetFnomer:integer;
procedure SetFnomer(FN:integer);
public
property FImyas:string read GetFImya
write SetFImya;
property Fnomers:integer read GetFnomer
write SetFnomer;
function Describe:string;
procedure SetAll(fam:string;god:integer; imya: string; nomer:integer); overload;
end;
implementation
function TChelovek.GetFImya:string;
begin
GetFImya:=FImya;
end;
procedure Tchelovek.SetFImya(FI:string);
begin
FImya:=FI;
end;
function TChelovek.GetFnomer:integer;
begin
GetFnomer:=Fnomer;
end;
procedure TChelovek.SetFnomer(Fn:integer);
begin
Fnomer:=Fn;
end;
function TChelovek.Describe:string;
begin
result:=inherited Describe;
Describe:=result+' èìÿ - '+FImya+' '+' íîìåð - '+IntToStr(Fnomer);
end;
procedure TChelovek.SetAll(fam:string;god:integer; Imya:string; nomer:integer);
begin
inherited SetAll(fam,god);
FImya:=Imya;
Fnomer:=nomer;
end;
end.
|