Существует специальная категория функций-членов, отвечающих за такие действия с объектами, как инициализация, присваивание, управление памятью, преобразование типов и уничтожение. Такие функции называются конструкторами. Они вызываются компилятором неявно каждый раз, когда объект класса определяется или создается оператором new. В объявлении конструктора его имя совпадает с именем класса. Конструкторов в классе может быть множество благодаря понятию перегрузки функции, которое было рассмотрено ранее.
Функция-член, которая выполняет действия обратные конструктору называется деструктором. Деструктор нужен для удаления объекта и очистки памяти при выходе объекта класса из области видимости. Имя деструктора также совпадает с именем класса, но перед ним используется знак “~”.
C++ автоматически вызывает конструкторы и деструкторы для инициализации и очистки объектов класса.
Для конструкторов и деструкторов существуют определенные правила. Ниже представлены правила для конструкторов:
|
|
1) для конструктора не указывается тип возвращаемого значения;
2) конструктор не может возвращать значения;
3) конструктор не наследуется;
4) конструктор не может быть объявлен с модификаторами const, volatile, static или virtual.
Для деструкторов правила немного отличаются:
1) деструктор не может иметь параметров;
2) деструктор не может возвращать значения;
3) деструктор не наследуется;
4) класс не может иметь более одного деструктора;
5) деструктор не может быть объявлен с модификаторами const, volatile, static или virtual.
Если в классе отсутствует деструктор, компилятор генерирует деструктор по умолчанию.
Пример:
#include <iostream.h>
class TTime {
private:
int year;
int month;
int day;
int hour;
int minute;
public:
TTime(int m, int d = -1, int y=-1, int hr=-1, int min=-1); //конструктор
~TTime(); //деструктор
void SetTime(int m, int d, int y, int hr, int min);
};
main()
{
TTime t1; //способ вызов конструктора для объекта t1 типа TTime
TTime t2(4,17,2008,16,17); //способ вызов конструктора для объекта t2 типа TTime
TTime now = new TTime(4,17,2008); //вызов конструктора для объекта now типа TTime
TTime *pnow = &now; //указатель на объект now
cout << “Дата и время установлены”;
return 0;
}
TTime::TTime(int m, int d, int y, int hr, int min)
{
cout << ”Создание объекта”;
SetTime(m,d,y,hr,min);
}
TTime::~TTime()
{
cout << ”Удаление объекта”;
}
void TTime::SetTime(int m, int d, int y, int hr, int min)
{
if (m >=0) month = m;
if (d >=0) day = d;
if (y >=0) year = y;
if (hr >=0) hour = hr;
if (min >=0) minute = min;
}