Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ГИА.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
1.05 Mб
Скачать

22. Конструкторы и деструкторы. Этапы проектирования. Особенности программирования в оконных операционных средах.

Ответ:

Конструкторы и деструкторы являются специализированными формами методов. Используемые в связи с расширенным синтаксисом стандартных процедур New и Dispose, конструкторы и деструкторы обладают способностью размещения и удаления динамических объектов. Кроме того, конструкторы имеют возможность выполнить требуемую инициализацию объектов, содержащих виртуальные методы. Как и все другие методы, конструкторы и деструкторы могут наследоваться, а объекты могут содержать любое число конструкторов и деструкторов. Конструкторы используются для инициализации вновь созданных объектов. Обычно инициализация основывается на значениях, передаваемых конструктору в качестве параметров. Конструктор не может быть виртуальным, так как механизм диспетчеризации виртуального метода зависит от конструктора, который первым совершил инициализацию объекта.

Окна среды программирования используются для выполнения действий, связанных с формированием в окнах создаваемого приложения видимых элементов (кнопок, списков, надписей, меню и т.д.), и для создания текстов программных процедур обработки событий, связанных с этими элементами (таких, например, событий, как нажатие на кнопку, выбор строки из списка или команды из меню и т.д.).

Часто конструкторы определяют как методы, предназначенные для создания экземпляров класса. Это не совсем корректно, так как экземпляр класса непосредственно создается (т.е. под него выделяется память) не конструктором, а соответствующими программными средствами, в соответствии с определением языка. Так, например, при определении локальных объектов память под них выделяется в момент вызова функции, в которой эти объекты определяются; при использовании динамических объектов память выделяется при выполнении оператора new. Конструктор непосредственно память не выделяет, но вызывается для инициализации выделенной памяти – т.е. в момент создания экземпляров класса. Однако при выполнении каких-либо вычислений может потребоваться создание временных экземпляров класса, которые уничтожаются по окончании этих вычислений; для создания таких временных экземпляров класса также используется конструктор.

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

По тому, каким образом конструктор инициализирует состояние класса, конструкторы определяются какинициализирующиеикопирующий.

Инициализирующие конструкторысодержат отдельные значения, используемые для инициализации состояния полей экземпляра класса. В списке параметров может быть указан нуль, один или более параметров любых типов. Один из инициализирующих конструкторов, имеющий пустой список параметров, имеет специальное наименование –пустой конструктор. Пустой конструктор также инициализирует состояние экземпляра класса, используя для этого предопределенные значения (в соответствии с требованиями задачи).

Копирующий конструкторинициализирует состояние класса значением другого экземпляра этого класса (создает копию существующего экземпляра класса). В списке параметров указывается единственный параметр, имеющий тип «ссылка на экземпляр класса».

По тому, кто определяет конструкторы, последние делятся на конструкторыпо умолчанию(не требуют какого-либо упоминания в определении класса) иявно определенныепрограммистом.

Конструкторы по умолчанию: только пустой и копирующий. Пустой конструктор по умолчанию не инициализирует состояние экземпляра класса. Копирующий конструктор по умолчанию при инициализации осуществляет побайтное копирование состояния указанного существующего экземпляра класса.

Конструкторы, определенные программистом: любые. Они осуществляют инициализацию состояния экземпляра класса в соответствии с логикой, определенной в конструкторе. Если программист определяет свои конструкторы, будут использоваться именно они. Если есть хотя бы один инициализирующий конструктор, определенный программистом, пустой конструктор по умолчаниюне используется(даже если программист не определил собственный пустой конструктор).

В определении конструкторов отсутствует тип возвращаемого значения (конструктор ничего не возвращает); имя конструктора совпадает с именем класса; в классе может быть определено несколько конструкторов.

Деструкторслужит для разрушения экземпляра класса. Опять же, память, занятая экземплярами класса, освобождается в соответствии с используемыми средствами языка; локальный объект уничтожается, когда осуществляется выход за пределы области видимости для этого объекта. Динамический объект уничтожается при выполнении оператораdelete. Временный объект уничтожается по окончании вычислений, в которых он используется. В момент уничтожения объектов для них вызывается деструктор.

В классе может быть определен только один деструктор. Также существует деструктор по умолчаниюилиявно определенныйпрограммистом.Деструктор по умолчаниюне выполняет никаких действий.Деструктор, определенный программистом, выполняет действия, указанные в его определении.