Конструкторы и деструкторы. Функциональное назначение. Виды конструкторов.

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

Создание объектов происходит при объявлении сущности в момент ее инициализации. Пример создания объектов класса Person:

Person pers1 = new Person();

Person pers2= new Person("Петрова");

Сущности pers1, pers2 класса Person объявляются с инициализацией, задаваемой унарной операцией new, которой в качестве аргумента передается конструктор класса Person. У класса может быть несколько конструкторов. В данном примере в первой строке вызывается конструктор без аргументов, во второй строке для сущности pers2 вызывается конструктор с одним аргументом типа string. Разберем в деталях процесс создания:

• первым делом для сущности pers создается ссылка, пока висячая, со значением null;

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

• если поля класса проинициализированы, как в нашем примере, то выполняется инициализация полей заданными значениями;

• если вызван конструктор с аргументами, то начинает выполняться тело этого конструктора. Как правило, при этом происходит инициализация отдельных полей класса значениями, переданными конструктору. Так, поле fam объекта pers2 получает значение "Петрова";

• На заключительном этапе ссылка связывается с созданным объектом.

Классу может потребоваться несколько конструкторов, в зависимости от контекста и создаваемого объекта, может требоваться различная инициализация его полей. Перегрузка конструкторов и обеспечивает решение этой задачи. Объекты создаются динамически в процессе выполнения программы — для создания объекта всегда вызывается тот или иной конструктор класса.