Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Function TwoNums.GetResult: Integer;
result:= a + b; end; function ThreeNums.GetResult: Integer; Begin Result: = Inherited GetResult + c; {Результат функции — сумма значения, выдаваемого переопределенным методом (сумма а и Ь), и свойства с} end; End. Жизненный цикл экземпляра класса Создание и разрушение экземпляра класса (объекта), а также работа с ним, имеет сложный внутренний механизм. Однако все действия, необходимые для поддержания жизненного цикла объекта, берет на себя компилятор. Рассмотрим последовательно стадии работы с экземпляром класса: 1. Создание экземпляра класса (объекта). 2. Использовани. 3. Разрушени. Каждый из этапов подробно рассмотрен нами далее.
5.3.1. Создание экземпляра класса. Конструктор
Для создания экземпляра класса необходимо вызвать специализированный статический метод этого класса, называемый конструктором. Конструктор наследуется автоматически всеми классами от коренного класса TObject и выполняет две важных функции: 1. Выделяет память под структуры данных, необходимые для поддержания жизнедеятельности объекта, то есть инициализирует объект; заполняет порядковые (целочисленные, логические, перечислимые и интервальные) свойства объекта нулевыми значениями; устанавливает нулевые ссылки (значение nil) для свойств-указателей, а также устанавливает нулевые длины динамическим строкам. 2. Возвращает ссылку на объект, которую можно сохранить в переменной для доступа к свойствам и методам объекта, а также для его последующего разрушения.
Описание и вызов конструктора
Описание конструктора в классе TObject выглядит следующим образом: Constructor Create; Для сохранения ссылки на вновь созданный объект используется переменная соответствующего типа: Var <Название переменной>: <Название класса>; Такая переменная автоматически рассматривается как ссылка на объект, и дополнительное указание компилятору на динамическую природу переменной не требуется. Листинг 5.12. Описание и вызов конструктора unit Geoml; Interface Type TGeomFigure = class {Заголовок класса TGeomFigure, класс автоматически является наследником класса TObject} End; Implementation Procedure CreateFigure; Var Figure: TGeomFigure;{Описание переменной — ссылки на экземпляр класса. Несмотря на то, что не указан модификатор ^,переменная Figure является переменной-указателем}
B egin Figure:= TGeomFigure. Create;{Вызов конструктора класса TGeomFigure, унаследованный от класса TObject, и сохранение ссылки на новый объект в переменной Figure} end; END.
Переопределение конструктора
Конструктор может быть переопределен в описании класса для выполнения дополнительной инициализации, характерной для экземпляров именно этого класса. Например, в конструкторе можно установить начальные значения свойств. Переопределение конструктора выполняется по обычным правилам переопределения методов, за исключением следующих моментов: 1.Конструктор родительского класса не обязательно должен быть помечен ключевым словом virtual, для того, чтобы его переопределить. Соответственно, если конструктор родительского класса не помечен как виртуальный или динамический, не требуется указание ключевого слова override в описании дочернего класса. Виртуальные конструкторы необходимы для работы с типами данных, являющимися ссылками на классы (а не на объекты). Такая ссылка используется, например, в конструкторе класса TCollection, предназначенного в Delphi для хранения динамических списков. 2. Существенным отличием в переопределении конструкторов и обычных методов, является возможность изменения параметров конструктора дочернего класса относительно конструктора родительского класса. Однако это возможно только в том случае, если конструктор не является виртуальным. Заметим, что полное переопределение конструктора обычно недопустимо, так как конструктор, определенный в родительском классе, от которого наследуется дочерний класс, может выполнять некоторые действия, без которых невозможна корректная работа объекта. Для вызова версии конструктора, замененной в классе-наследнике, используется ключевое слово Inherited: Inherited; Таким образом, любой переопределенный конструктор может и (обычно) должен сначала вызвать ту версию конструктора, которую он переопределяет. Если в классе-наследнике изменен список параметров родительского конструктора (например, список расширен), конструктор родительского класса вызывается с указанием его названия и передачей ему необходимых параметров:
Inherited Create (<Список параметров>); Рассмотрим пример создания объекта с переопределением конструктора (листинг 5.13). Листинг 5.13. Пример создания объекта с переопределением конструктора unit Geom2; Interface Type TGeomFigure = class {Заголовок класса TgeomFigure, класс автоматически является наследником класса Tobject} Protected Color: Integer; {Описание свойства с областью видимости protected) Public Constructor Create(aColor: Integer); {Заголовок конструктора (область видимости public), список параметров изменен по отношению к родительскому классу TObject, конструктор которого не имеет параметров} End; Implementation Constructor TGeomFigure. Create; {Заголовок описательной части конструктора} Begin Inherited Create; {Вызов конструктора родительского класса} Color:= aColor; {Инициализация свойства, которая не может быть выполнена в родительском классе, так как свойство Color описано в классе TGeomFigure} end; End.
5.3.2. Использование экземпляра класса Использование объекта заключается в вызове его методов и обращении к его свойствам аналогично работе с обычными переменными и подпрограммами, но с указанием переменной-объекта, к которому относятся эти свойства и методы: <Объект>.<Свойство> ИЛИ <Объект>.<Метод>(<Список параметров>); Пример использования экземпляра класса показан в листинге 5.14. Листинг 5.14. Пример использования экземпляра класса unit Geom 3; Interface Type TGeomFigure = class Protected Color: Integer; public
|
||||||
Последнее изменение этой страницы: 2021-04-04; просмотров: 55; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.220.136.165 (0.013 с.) |