- •Конструкторы
- •Полиморфизм
- •Виртуальные методы
- •Метод становится виртуальным, если за его объявлением в типе объекта стоит зарезервированное слово
- •Необходимо помнить, что если метод объявлен в родительском типе как
- •Например:
- •Виртуальные методы
- •Виртуальные методы
- •Виртуальные методы
- •Например:
- •Виртуальные методы
- •Виртуальные методы
- •Как только родительский тип объекта объявит метод виртуальным, все его потом
- •Расширяемость объектов
- •Рекомендуется делать методы виртуальными.
- •Точно так же, как и любые типы данных в Паскале,
- •Если динамический объект содержит виртуальные
- •Специально для работы с динамическими объектами
- •При использовании расширенного синтаксиса процедуры
- •Процедура New также может использоваться в качестве функции, которая возвращает значение указателя.
- •Турбо Паскаль позволяет установить пользовательскую функцию обработки ошибок динамической памяти с помощью переменной
- •Новая функция обработки ошибок устанавливается путем присваивания ее адреса переменной НеарЕrrоr следующим образом:
- •По умолчанию, если не хватает памяти для размещения экземпляра динамическог
- •Обнаружение ошибок конструктора
- •Обнаружение ошибок конструктора
- •Обнаружение ошибок конструктора
- •Если динамические экземпляры р
- •Рассмотрим, как можно описать последовательный вызов конструкторов типа
- •пример
- •можно переписать конструкторы типа TStaff и ТТеасher с учетом обнаружения ошибок:
- •CONSTRUCTOR TStaff.Init(Nm,Dt:STRING; Rt,Bn:REAL);
- •Деструкторы
- •Деструкторы
- •Деструктор размещается вместе
- •Деструкторы можно наследовать, и они могут быть либо с
- •Деструкторы
- •Деструкторы
- •Информация о размере удаляемого объекта становится дост
- •Для выполнения освобождения памяти при позднем связывании деструктор нужно вызывать как часть расширенного
- •Деструкторы
- •DESTRUCTOR TPerson.Done;
- •Динамические методы.
- •Динамические методы.
- •Использование динамических методов целесообразно при создании длинной иерарх
Конструкторы
и
Деструкторы
1
Полиморфизм
является
необходимым средством при обеспечении расширяемости типов в приложениях.
2
Виртуальные методы |
3 |
Метод становится виртуальным, если за его объявлением в типе объекта стоит зарезервированное слово VIRTUAL.
Виртуальные методы |
4 |
Необходимо помнить, что если метод объявлен в родительском типе как
VIRTUAL, то
все методы с аналогичными именами в дочерних типах также должны объявляться
виртуальными,
во избежание ошибки компилятора.
5
Например: |
|
|
|
|
|
UNIT New_persons; |
|
|
|
|
|
INTERFACE |
|
|
|
|
|
TYPE |
|
|
|
|
|
PPerson = ^TPerson; |
|
|
|
|
|
TPerson = OBJECT |
|
|
|
|
|
Name : STRING[30]; |
|
|
|
|
|
Date |
: STRING[10]; |
|
|
|
|
Rate |
: REAL; |
|
|
Rt:REAL); |
|
CONSTRUCTOR Init(Nm,Dt:STRING; |
|
||||
DESTRUCTOR Done; |
|
VIRTUAL; |
|
|
|
PROCEDURE ShowAll; |
|
VIRTUAL; |
|
|
|
END; |
|
|
|
|
|
PStudent = ^TStudent; |
|
|
|
||
TStudent = OBJECT(TPerson) |
|
|
|||
Ball |
: REAL; |
|
|
Rt,Bl:REAL); |
|
CONSTRUCTOR Init(Nm,Dt:STRING; |
|
||||
DESTRUCTOR Done; |
|
VIRTUAL; |
|
|
|
FUNCTION GetSum : REAL; VIRTUAL; |
|
|
|||
PROCEDURE ShowSum; |
VIRTUAL; |
|
|
||
PROCEDURE ShowAll; |
|
VIRTUAL; |
|
|
|
END; |
|
|
|
|
|
PStaff = ^TStaff; |
|
|
|
|
|
TStaff = OBJECT(TPerson) |
|
|
|
||
Bonus |
: REAL; |
|
|
Rt,Bn:REAL); |
|
CONSTRUCTOR Init(Nm,Dt:STRING; |
|
||||
DESTRUCTOR Done; |
|
Виртуальные методы |
6 |
||
VIRTUAL; |
|
||||
FUNCTION GetSum : REAL; VIRTUAL; |
|
|
|||
PROCEDURE ShowSum; |
VIRTUAL; |
|
|
Виртуальные методы |
7 |
Виртуальные методы |
8 |
Виртуальные методы |
9 |
Например: |
VAROne,Two: TPerson; |
BEGIN |
One.Init('Петр Петров','25-06-1995' ,400000); |
Two := One; {Неправильный вызов!} |
END; |
Виртуальные методы |
10 |