Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
В противоположность информационным полям идентификаторы методов в дочерних типах могут совпадать с именами методов в родительских типах. В этом случае говорят, что дочерний тип подавляет одноименный ему родительский, и в рамках дочернего типа, при указании имени этого метода, будет вызываться именно дочерний метод, а не родительский.
Пример:
Программа, которая создает птицу, машущую крыльями и перемещающуюся по экрану в зависимости от нажатия на клавиши управления курсором. Создается дочерний объект птицы, который имеет новый метод –изменение размера птицы с помощью коэффициента масштабирования. При нажатии клавиши «пробел»птица уменьшает свои размеры в 3 раза, причем координаты в этот момент не изменяются.
Program DemoObgectStaya;
Uses Graph,CRT;
Type
Mother = object; {Родительский объект}
x,y:integer;
vver,pole,vnis:Pointer;
Mize,Size,Lize,ax1,ay1:integer;
ch:char;
Procedure Draw(xa,ya:integer);
Procedure Mahi(bx,by:integer);
Procedure Polet(ax,ay:integer);
end;
Doter = object(Mother) {Дочерний объект}
Procedure DrawMin(k:real;xa,ya:integer);
end;
Procedure Mother.Draw(xa,ya:integer);
Begin {Рисование и ввод в динамическую память}
SetColor(14); {родительской птицы}
SetFillStyle(1,14);
FillEllipse(xa,ya,10,10);
Line(xa-10,ya,xa-30,ya);
Line(xa+10,ya,xa+30,ya);
Line(xa-30,ya,xa-50,ya-20);
Line(xa+30,ya,xa+50,ya-20);
Size:=ImageSize(xa-50,ya-20,xa+50,ya+20);
GetMem(vver,size);
GetImage(xa-50,ya-20,xa+50,ya+20,vver^);
ClearDevice
FillEllipse(xa,ya,10,10);
Line(xa-10,ya,xa-30,ya);
Line(xa-10,ya,xa+30,ya);
Line(xa-30,ya,xa-50,ya+20);
Line(xa+30,ya,xa+50,ya+20);
Lize:=ImageSize(xa-50,ya-20,xa+50,ya+20);
GetMem(vniz,lize);
GetImage(xa-50,ya-20,xa+50,ya+20,vniz^);
ClearDevice:
end;
Procedure Mother.Mahi(bx,by:integer);
Begin {Задание взмахов птицы}
Mize:=ImageSize(bx,by,bx+100,by+40);
GetMem(pole,mize);
GetImage(bx,by,bx+100,by+40,pole^);
PutImage(bx,by,vver^,1);
delay(70);
PutImage(bx,by,pole^,0);
PutImage(bx,by,vniz^,1);
delay(70);
PutImage(bx,by,pole^,0);
PutImage(bx,by,vniz^,1);
delay(70);
PutImage(bx,by,pole^,0);
end;
Procedure Mother.Polet(ax,ay:integer);
Begin {Управление полетом птицы}
if (ax=0) and (ay=0) then
begin
ax:=ax1;
ay:=ay1;
end;
repeat
if KeyPressed then
begin
ch:=ReadKey;
case ch of
#77:ax:=ax+10;
#75:ax:=ax-10;
#80:ay:=ay+10;
#72:ay:=ay-10;
end;
Mahi(ax,ay);
end;
else Mahi(ax,ay);
until ch=#32;
ax1:=ax;
ay1:=ay;
end;
Procedure Doter.DrawMin(k:real;xa,ya:integer);
Begin {Рисование и ввод в динамическую память}
SetColor(14); {дочерней птицы}
SetFillStyle(1,14);
FillEllipse(xa,ya,round(10/k),round(10/k));
Line(xa- round(10/k),ya,xa- round(30/k),ya);
Line(xa+ round(10/k),ya,xa+ round(30/k),ya);
Line(xa- round(30/k),ya,xa- round(50/k),ya- round(20/k));
Line(xa+ round(30/k),ya,xa+ round(50/k),ya- round(20/k));
Size:=ImageSize(xa- round(50/k),ya- round(20/k),xa+ round (50/k),ya+ round(20/k));
GetMem(vver,size);
GetImage(xa- round(50/k),ya- round(20/k),xa+ round(50/k), ya+ round(20/k),vver^);
ClearDevice
FillEllipse(xa,ya, round(10/k), round(10/k));
Line(xa- round(10/k),ya,xa- round(30/k),ya);
Line(xa- round(10/k),ya,xa+ round(30/k),ya);
Line(xa- round(30/k),ya,xa- round(50/k),ya+ round(20/k));
Line(xa+ round(30/k),ya,xa+ round(50/k),ya+ round(20/k));
Lize:=ImageSize(xa- round(50/k),ya- round(20/k),xa+ round (50/k),ya+ round(20/k));
GetMem(vniz,lize);
GetImage(xa- round(50/k),ya- round(20/k),xa+ round(50/k), ya+ round(20/k),vniz^);
ClearDevice:
end;
Var GrDriver, GrMode,alx,aly:integer;
gol:mother;vorob:Doter;
Begin
GrDriver:= Detect;
InitGraph (GrDriver, GrMode, 'C: |Bp|BGI');
readln;
Gol.Draw(100,100);
vorob.drawmin(3,400,400);
Gol.Polet(100,100);
alx:=Gol.ax1;
aly:=Gol.ay1;
vorob.polet(alx,aly);
CloseGraph;
End.
Дата публикования: 2015-06-12; Прочитано: 202 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!