Конструктор предназначен для инициализации объекта и вызывается автоматически при его создании.
□ Конструктор не возвращает значение, даже типа void. Нельзя получить указатель на конструктор.
□ Класс может иметь несколько конструкторов с разными параметрами для разных видов инициализации (при этом используется механизм перегрузки).
□ Конструктор, вызываемый без параметров, называется конструктором по умолчанию.
□ Параметры конструктора могут иметь любой тип, кроме этого же класса. Можно задавать значения параметров по умолчанию. Их может содержать только один из конструкторов.
□ Если программист не указал ни одного конструктора, компилятор создает его автоматически. Такой конструктор вызывает конструкторы по умолчанию для полей класса и конструкторы по умолчанию базовых классов. В случае, когда класс содержит константы или ссылки, при попытке создания объекта класса будет выдана ошибка, поскольку их необходимо инициализировать конкретными значениями, а конструктор по умолчанию этого делать не умеет.
□ Конструкторы не наследуются.
□ Конструкторы нельзя описывать с модификаторами const, virtual и static.
□ Конструкторы глобальных объектов вызываются до вызова функции main. Локальные объекты создаются, как только становится активной область их действия. Конструктор запускается и при создании временного объекта (например, при передаче объекта из функции).
Перегружать можно не только конструкторы, но и другие методы класса.
Существует еще один способ инициализации полей в конструкторе:
monstr::monstr(int he. int am):health (he), ammo (am), skin (red), name (0){}
Конструктор не может возвратить значение, чтобы сообщить об ошибке во время инициализации. Для этого можно использовать механизм обработки исключительных ситуаций.
Конструктор копирования — это специальный вид конструктора, получающий в качестве единственного параметра указатель на объект этого же класса:1
Т: :T(const Т&) { _ /* Тело конструктора, */ }
где Т — имя класса.
Этот конструктор вызывается в тех случаях, когда новый объект создается путем копирования существующего:
□ при описании нового объекта с инициализацией другим объектом;
□ при передаче объекта в функцию по значению;
□ при возврате объекта из функции1.
Если программист не указал ни одного конструктора копирования, компилятор создает его автоматически.
Деструктор — это особый вид метода, применяющийся для освобождения памяти, занимаемой объектом. Деструктор вызывается автоматически, когда объект выходит из области видимости:
□ для локальных объектов — при выходе из блока, в котором они объявлены;
□ для глобальных — как часть процедуры выхода из main;
□ для объектов, заданных через указатели, деструктор вызывается неявно при использовании операции delete.
Автоматический вызов деструктора объекта при выходе из области действия указателя на него не производится.
Имя деструктора начинается с тильды (~), непосредственно за которой следует имя класса. Деструктор:
□ не имеет аргументов и возвращаемого значения;
□ не может быть объявлен как const или static;
□ не наследуется;
□ может быть виртуальнымю.
Если деструктор явным образом не определен, компилятор автоматически создаёт пустой деструктор.
Описывать в классе деструктор явным образом требуется в случае, когда объект содержит указатели на память, выделяемую динамически — иначе при уничтожении объекта память, на которую ссылались его поля-указатели, не будет помечена как свободная. Указатель на деструктор определить нельзя.