§ 2. Классы
2.2. Конструкторы
Для начальной инициализации класса используются конструкторы. Конструктор — специальный тип метода класса, который автоматически вызывается при создании объекта этого же класса. Конструкторы обычно используются для инициализации полей объекта класса (пример 2.3). В отличие от обычных методов конструкторы имеют определенные правила именования:
В классе может быть несколько конструкторов. Конструктор, который не имеет параметров, называется конструктором по умолчанию. Он вызывается, если пользователем не указаны значения для инициализации. Конструкторы также могут быть объявлены с параметрами, которые используются для инициализации полей. В классе можно определить любое количество конструкторов, каждый из которых должен иметь уникальные параметры. В конструкторе может быть использован список инициализации полей класса. Список инициализации располагается после параметров конструктора. Он начинается с двоеточия (:), а затем значение для каждого поля указывается в круглых скобках. В теле конструктора не нужно выполнять операции присваивания, поэтому тело конструктора может быть пустым. Список инициализации членов класса не заканчивается точкой с запятой (пример 2.4). Каждый метод класса неявно содержит в качестве поля данных указатель: ИмяКласса *this; С его помощью метод класса определяет, с данными какого объекта ему предстоит работать. Указатель this можно использовать в конструкторах (пример 2.5). Деструктор класса — еще один специальный метод — вызывается при уничтожении объекта. Имя деструктора аналогично имени конструктора, только в начале ставится знак тильды: ~. Деструктор не имеет входных параметров. Деструктор всегда один. Для простых классов (тех, которые только инициализируют значения обычных свойств) деструктор не нужен, так как C++ автоматически выполнит очистку памяти самостоятельно. Деструкторы не вызываются пользователем явно. Однако их могут безопасно вызывать другие методы класса, т. к. объект не уничтожится до тех пор, пока не выполнится деструктор. |
Пример 2.3. Добавление конструкторов в класс Student.
Функция для ввода данных с использованием конструктора изменится следующим образом:
Пример 2.4. Использование списка инициализации при описании конструкторов в классе Student.
Переменные в списке инициализации получают свои значения не в том порядке, в котором они указаны, а в том порядке, в котором объявлены в классе. Поэтому при использовании списков инициализации лучше сохранять тот же порядок полей, который задан при описании класса. Пример 2.5. Использование указателя this в конструкторе класса Date.
|