Четвертый Borland C++ и его окружение

       

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


C++ обеспечивает удобные способы создания и удаления объектов,

через специальные процедуры. Процедуры создания объектов называются

конструкторами, а процедуры уничтожения - деструкторами. Конструкторы

автоматически вызываются при описании объекта, а деструкторы - при

выходе из блока, в котором этот объект был описан.

Если необходимые конструкторы или деструктор для класса не

описаны, то транслятор создает их сам.

Для того, чтобы понять важность конструкторов, сделаем маленькое

отступление. Общей проблемой для всех традиционных языков программирования является инициализация: прежде чем использовать структуру

данных, нужно выделить ей память и проинициализировать. Рассмотрим

задачу инициализации следующей структуры:

class rectangle { // Прямоугольник

public:



int wd, ht; // Ширина и высота

};

Неопытные программисты могут попробовать присвоить значения элементам wd и ht следующим образом:

rectangle this_rect // Создание нового объекта this_rect

this_rect.wd = 20; // с заданной шириной

this_rect.ht = 10; // и высотой

Ошибки не будет, но такой способ тесно связан с конкретным объектом, this_rect. Если понадобится проинициализировать несколько объектов типа rectangle, то операция присваивания потребуется использовать неоправданно часто. В данном случае естественным шагом является

создание функции инициализации, которая обобщает операции присваивания, работая с любым объектом типа rectangle, переданным ей в качестве аргумента:

void init_rect(rectangle* target, int wd, int ht)

{

target->wd = new_wd;

targrt->ht = new_ht;

}

Данная функция использует переданный ей указатель на объект типа

rectangle для присваивания элементам объекта значений ее аргументов.

С помощью операции -> указывается элемент, ссылающийся на элементы

класса. Функция init_rect, разработанная специально для структуры

rectangle, работает корректно.

Объектно-ориентированный подход требует возможности создания

функции элемента, которая сможет инициализировать любой объект класса

rectangle. Такой функцией является конструктор.



Содержание раздела