Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
все ответы.docx
Скачиваний:
8
Добавлен:
26.09.2019
Размер:
2.71 Mб
Скачать
  1. Реализация наследования на примере языка Delphi.

Для использования механизма наследования в Delphi необходимо в объявлении класса справа от слова class указать класс предок: Абсолютно все классы в Delphi являются потомками класса TObject. Если класс-предок не указан, то подразумевается, что новый класс является прямым потомком класса TObject.

Множественное наследование в Delphi частично поддерживается за счёт использования классов-помощников (Сlass Helpers).

Начинается описание (интерфейсная часть класса) со строки:

<имя класса> = class [(<имя класса-предка>)]

а заканчивается ключевым словом end;

где <имя класса> – правильный идентификатор, а <имя класса-предка> – имя класса, описание которого доступно в данной точке программы (т.е. он описан или предварительно описан выше по тексту модуля или находится в интерфейсной части используемого модуля).

Все, что между этими строками – список элементов (членов) класса. Если указан класс-предок и нет ни одного нового элемента в классе, то ключевое слово end можно опустить. Такое описание называется кратким описанием класса.

Интерфейс класса состоит из произвольного количества произвольно чередующихся секций (атрибутов доступа или доступности или видимости):

public, protected, private, published и automated

Например, класс TEmployee (сотрудник) может быть порожден от рассмотренного выше класса TTPerson путем добавления поля Department (отдел). Объявление класса TEmployee в этом случае может выглядеть так:

TEmployee = class(TTPerson) FDepartment:integer; // номер отдела constructor Create(Name:TName;Dep:integer); end;

Ключевое слово Inherited используется, чтобы назвать родительский конструктор или метод деструктора, как соответствующий для текущего класса. Оно вызывается в начале конструктора, и в конце деструктора. Это не является обязательным, но рекомендуется. Без параметров Inherited вызывает так же названный метод родительского класса, с теми же самыми параметрами.

Вы можете вызвать различный родительский метод, при его соответствии.

  1. Create; begin Inherited; // Всегда вызывается в начале конструктора ... End; Иерархия стандартных классов Delphi

  1. Совместимость типов для классов в иерархии наследования. Преобразование и приведение типов.

    1. Совместимость объектов различных классов

Для классов, связанных отношением наследования, вводится новое правило совместимости типов. Вместо объекта базового класса можно подставить объект любого производного класса. Обратное неверно. Например, переменной типа TResourceGauge можно присвоить значение переменной типа TDiskGauge:

Code:

var

R: TResourceGauge;

...

R := TDiskGauge.Create;

...

 

 

Объектная переменная R формально имеет тип TResourceGauge, а фактически связана с экземпляром класса TDiskGauge.

Правило совместимости классов чаще всего применяется при передаче объектов в параметрах процедур и функций. Например, если процедура работает с объектом класса TResourceGauge, то вместо него можно передать объект класса TDiskGauge или TMemoryGauge.