Серия "Вопросы структурного чайника, который пытается стать объектным самоваром" продолжается.
Для чего или, лучше сказать, в каких случаях надо использовать виртуальные методы? Они дают возможность предкам использовать методы наследников, ну и что? В каких случаях это может пригодится? Мне кажется, что это достаточно трудно спроектировать подобные ситуации, в которых это понадобится. Хотя я очень часто вижу использование этих методов.
Вот классический пример, накалякал сейчас на скорую руку. Разберись с ним сначала - Ок?
Думаю, заметишь преимущество.
uses
CRT;
type
tThing = object
procedure Show; virtual;
procedure Hide; virtual;
procedure MoveTo(x,y:integer); virtual;
constructor Create;
end;
tStone = object(tThing)
procedure show; virtual;
procedure Hide; virtual;
end;
var
Stone:tStone;
constructor tThing.Create;
begin
end;
procedure tThing.Show;
begin
end;
procedure tThing.Hide;
begin
end;
procedure tThing.MoveTo(x,y:integer);
begin
Hide;
GoToXY(x,y);
Show
end;
procedure tStone.Show;
begin
Write('Stone');
end;
procedure tStone.Hide;
begin
Write(' ');
end;
begin
With Stone do begin
Create;
Show;
ReadLn;
MoveTo(10,10);
ReadLn;
MoveTo(50,10);
ReadLn;
MoveTo(20,20);
ReadLn;
MoveTo(70,15);
ReadLn;
end
end.
procedure MoveTo(x,y:integer); virtual;
volvo, то что надо!!!