Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lecture2_PAS.doc
Скачиваний:
22
Добавлен:
08.12.2018
Размер:
64 Кб
Скачать

8.2. Свойство полиморфизма.

Свойство полиморфизма заключается в том, что в объявлении типа наследника могут быть методы, одноименные с именами методов родителя.

Объявление типа окружность c использованием в качестве родителя типа POINT будет следующим:

type

CIRCL=object(POINT)

R: integer;

procedure INIT(X0, Y0, R0: integer); { задание окружности }

procedure TURN_ON; { получение видимой окружности }

procedure TURN_OFF; { получение невидимой окружности }

procedure MOVE(XN, YN: integer); { перемещение окружности}

function GET_R: integer; { получение радиуса }

end;

Правила наследования при полиморфизме:

  • одноименные методы наследника заменяют методы родителя;

  • методы наследника, не совпадающие по именам с методами родителя, добавляются после методов родителя.

Определение методов с использованием наследования при полиморфизме:

procedure CIRCL.INIT;

begin

X:=X0; Y:=Y0;

R:=R0;

V:=false;

end;

procedure CIRCL.TURN_ON;

begin

V:=true;

CIRCLE(X,Y,R);

end;

procedure CIRCL.TURN_OFF;

var

C: byte;

begin

C:=GetColor;

SetColor(GetBkColor); { установка цвета рисования }

Circle(X,Y,R);

V:=false;

SetColor(C);

end;

procedure CIRCL.MOVE;

var

F: boolean;

begin

F:=V;

if F then

TURN_OFF;

X:=XN;

Y:=YN;

if F then

TURN_ON;

end;

function CIRCL.GET_R;

begin

GET_R:=R;

end;

В результате текст процедуры CIRCL.MOVE совпадает с текстом процедуры POINT.MOVE, но машинные коды у этих процедур будут разные; CIRCL.MOVE при своем исполнении обращается к адресам процедур CIRCL.TURN_ON и CIRCL.TURN_OFF, а процедура POINT.MOVE – к адресам процедур POINT.TURN_ON и POINT.TURN_OFF.

7

Соседние файлы в предмете Программирование на Pascal