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

 

Классы в Си++ имеют две специальные функции, называемые

конструктором и деструктором.

Конструктор (constructor) — это функция (метод), которая

автоматически вызывается при создании экземпляра класса и который строит в


 

памяти объект данного класса и используется для инициализации данных-

членов класса.

Конструктор имеет имя, идентичное имени класса и не имеет

возращаемого значения. Для конструктора не указывается тип возвращаемого

значения (дажtе void недопустим).

 

Описание конструктора имеет следующий формат:


имя_ конструктора (список_ параметров)


{тело_ конструктора}


Конструктор может иметь значения параметров по умолчанию, которые

задаются в списке параметров.

В вызове конструктора по сравнению с другими методами существуют

следующие особенности:

· если конструктор не вызывается явно, то он будет вызван автоматически

при создании объекта с использованием значений параметров по умолчанию;

· если конструктор не описан явно, то он генерируется транслятором без

участия программиста.

Для передачи значений элементам данных объекта с помощью конструктора

существует два формата записи. Первый из них:

имя_ класса имя_ объекта = имя_ конструктора (список_

аргументов); Второй, более короткий, формат вызова конструктора имеет

вид:

имя_ конструктора имя_объекта (список_ аргументов) ;

Если в классе нет явного определения конструктора, то компилятор

C++Builder создает конструктор по умолчанию (default constructor).

Класс может иметь более одного конструктора. Это возможно благодаря

перегрузке функций.

Функция-конструктор может иметь параметры по умолчанию:

 

Sphere ( float xcoord, float ycoord = 2.0,

float zcoord = 2.5, float radius = 1.0)

{ x = xcoord; у = ycoord; z = zcoord; r = radius;}

 

Можно создать сферу любой из следующих команд:

Sphere s(l.O); // Использование всех возможных аргументов по

умолчанию

Sphere t(1.0, 1.1); // Явно указывается координата у

Sphere u(1.0, 1.1, 1.2);// Явно указываются координаты у и z

Sphere v(1.0, 1.1, 1.2, 1.3); // Отменяются все параметры по умолчанию

 

Деструктор (destructor) — это специальная функция, которая авто-

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


 

Деструктор является противоположностью конструктору. Обычно он используется для освобождения

 

памяти, выделенной классу, или выполняет другие задачи, например, такие, как вывод последних

 

значений данных-членов класса. Класс может иметь не более одного деструктора.

 

Деструктор не должен иметь ни параметров, ни типа возвращаемого

значения. Описание деструктора имеет следующий формат:

~имя класса( ) {операторы_тела_деструктора}

Наличие деструктора не является обязательным. Деструктор не возвращает никакого значения и не

 

принимает аргументов. Его имя образуется из имени класса с добавлением впереди тильды (~).

 

Ниже приводится класса sphere, который содержит функцию-

конструктор- деструктор и функцию-объем:

 

Пример:

#include <math.h>

 

class Sphere

{ public :

float r; // Радиус сферы

float x, у, z; // Координаты сферы

Sphere (float xcoord, float ycoord,float zcoord, float radius)

{ x = xcoord; у = ycoord; z = zcoord; r = radius; }

~Sphere ( ) {

cout << "Sphere (" << x << “,” << у <<", "<< z << ", " << r << ")

destroyed\n";}

float volume ( )

{return (r*r*r*4* M_PI/3) ;}

float surface( )

{return (r * r * 4 * M_PI);}

};

void main(void)

{

Sphere s (1.0, 2.0, 3.0, 4.0);

cout << "X = " << s.x<< "Y ="<<s.y<<"Z ="<< s.z<<"R =

"<<s.r<<"\n";

cout << "The volume is " << s.volume( )<< "\n";

cout <<"The surface is"<<s . surfacea ( ) « "\ n";

}

//Результат работы программы

Х=1 Y = 2 Z = 3 R = 4 The volume is 268.083

surface area is 201.062

Sphere (1, 2, 3, 4) destroyed


 

После того, как определен класс, можно создавать переменные типа

класса. Такие переменные называются экземпляры класса.

Формат объявления класса <имя класса><имя экземпляра> :

Sphere Variable;

Разработка объектов опирается на понятие инкапсуляция.