Конструкторы и деструкторы

Существует специальная категория функций-членов, отвечающих за такие действия с объектами, как инициализация, присваивание, управление памятью, преобразование типов и уничтожение. Такие функции называются конструкторами. Они вызываются компилятором неявно каждый раз, когда объект класса определяется или создается оператором 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;

}


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



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