Объектно-ориентированное программирование



         

Объектно-ориентированное программирование - стр. 80


И конструкторы и деструкторы не могут иметь описания типа.

Обратимся к  ПРИМЕРУ 3, где мы описывали кольцевой буфер. Там нам нужна была функция init() для того, чтобы проанализировать индексы источника и приемника. Эта функция обязательно должна была вызываться для каждой создаваемой переменной этого типа. Если теперь мы преобразуем структуру C_Buffer в класс, то логично будет переделать функцию init в конструктор. Это пример, когда конструктор просто необходим при описании класса. Более редкий случай - когда необходимо применение деструктора. Деструктор нужен, например, для освобождения динамической памяти, занятой объектом.

 Например, описание конструктора класса _3d:

Class _3d{

_3d(double &x,double &y,double &z){ x=X,Y=Y,z=Z;}

_3d(_3d&a){x=a.x;y=a.y;z=a.z;}

};

Если необходимые конструкторы или деструктор для класса не описаны, то транслятор создает их сам. Вызов конкретного конструктора для создаваемого объекта происходит в зависимости от аргументов, которые могут быть указаны в круглых скобках после имени создаваемого объекта, например: _3dA(0.0,1.0,0.0) , B;

Здесь для объекта А будет вызван описанный нами конструктор

 _3d(double &x,double &y,double &z)

, а для объекта  B - созданный транслятором _3d().

Существует специальный тип конструктора, который вызывается при выходе из функции, если та возвращает объект данного класса. Дело в том, что все объекты, описанные внутри функции, разрушаются (для них вызывается деструктор) при выходе из нее. Такой конструктор нужен для того, чтобы скопировать результат до того, как он будет разрушен. Это необходимо, например, для объектов, использующих динамическую память. В качестве аргумента в этом конструкторе выступает объект того же класса.

ПРИМЕР  4

Создать буфер значительного объема.

 Необходимо изменить описание класса C_Buffer так, чтобы можно было задавать объем буфера при  его объявлении. В состав класса вводится дополнительное поле - длина буфера.


Содержание  Назад  Вперед