По теме лабораторной работы. Недостатком рассмотренных ранее классов является отсутствие автоматической инициализации создаваемых объектов

Недостатком рассмотренных ранее классов является отсутствие автоматической инициализации создаваемых объектов. Для каждого вновь создаваемого объекта необходимо было вызвать функцию типа set (как для класса Date), либо явным образом присваивать значения данным объекта. Однако для инициализации объектов класса в его определение можно явно включить специальную компонентную функцию, называемую конструктором. Формат определения конструктора следующий имя_класса (список_форм_параметров)

Имя этой компонентной функции по правилам языка С++ должно совпадать с именем класса. Такая функция автоматически вызывается при определении или размещении в памяти с помощью оператора new каждого объекта класса.

Date (int d0 = 0, int m0 =0, int y0 =0)

{

d = d0;

m = m0;

y = y0;

}

Конструктор выделяет память для объекта и инициализирует данные-члены класса. Конструктор имеет ряд особенностей. Для конструктора не определяется тип возвращаемого значения. Даже тип void не допустим. Указатель на конструктор не может быть определен и соответственно нельзя получить адрес конструктора.

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

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

Такую возможность обеспечивает специальный компонент класса - деструктор класса. Его формат: ~имя_класса () { операторы_тела_деструктора }.

Имя деструктора совпадает с именем его класса, но предваряется символом "~" (тильда).

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

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

Также как и для конструктора, не может быть определен указатель на деструктор.

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

По результатам сессии в деканате имеется список задолжников, т.е. студентов, имеющих неудовлетворительные оценки по экзаменам, зачетам, курсовым проектам и работам.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: