Наследование

Pascal не поддерживает множественного наследования, то есть каждый класс может иметь не более одного наследника. Для того, чтобы объявить класс наследником какого-то другого класса достаточно указать имя класса-предка при объявлении наследника:

Type Class2 = Object(Class1)

 

M: Integer;
End;

 

Var Object3: Class2;

 

При таком объявлении объект Object3 обладает тремя полями - A, V, M - и одним методом - Nothing(Var Byte).

Методы

Методы объектов обладают единственным отличием от обычных процедур/функций: они, собственно, принадлежат объектам. Следовательно, они обладают доступом к полям именно "своему" объекту. Так как объектов в программе может быть множество, то, во избежание дублирования кода, каждый метод получает в качестве неявного параметра указатель на объект, для которого он вызван. Данный указатель доступен в теле метода как @Self. Естественно, что объявленный (декларированный) при определении класса метод должен быть определен (дефинирован) в программе. Делается это примерно следующим образом:

Procedure Class1.Nothing(Var K: Byte);
Begin {body of method}
V:= K;
@Self^.V:= K;

 

End;

Третья и четвертая строки абсолютно идентичны. В сущности третья является лишь удобным сокращением второй.

Известно, что все методы класса делятся на обычные (статические) и виртуальные. Любой метод считается статическим, если не указано обратное. Указать же, что метод является виртуальным можно, указав после его декларации в дефиниции класса ключевое слово Virtual:

Type
Class3 = Object

 

Procedure Nothing(Var K: Byte); Virtual;
End;

 

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: