Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Правило 6



В противоположность информационным полям идентификаторы методов в дочерних типах могут совпадать с именами методов в родительских типах. В этом случае говорят, что дочерний тип подавляет одноименный ему родительский, и в рамках дочернего типа, при указании имени этого метода, будет вызываться именно дочерний метод, а не родительский.

Пример:

Программа, которая создает птицу, машущую крыльями и перемещающуюся по экрану в зависимости от нажатия на клавиши управления курсором. Создается дочерний объект птицы, который имеет новый метод –изменение размера птицы с помощью коэффициента масштабирования. При нажатии клавиши «пробел»птица уменьшает свои размеры в 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...