Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекція №3 Функції-члени класу.doc
Скачиваний:
2
Добавлен:
10.11.2019
Размер:
95.23 Кб
Скачать

7

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

Створюючи деякий об'єкт, його необхідно проініціалізувати. Для цієї мети C++ надає функцію-член, яка називається конструктором.

Правила для конструкторів

  1. конструктор класу викликається щораз, коли створюється об'єкт його класу тобто в момент оголошення об'єкта. Таким чином, в C++ оператор оголошення змінної є виконуваним оператором;

  2. конструктор звичайно ініціалізує дані - члени класу й резервує пам'ять для динамічних членів;

  3. конструктор має те ж ім'я, що й клас, членом якого він є;

  4. для конструктора не вказується тип значення, що вертається;

  5. конструктор не може повертати значення;

  6. конструктор не успадковується;

  7. клас може мати скільки завгодно перевантажених конструкторів;

  8. якщо в класі не визначений ні один конструктор, компілятор генерує конструктор за замовчуванням, що не має параметрів.

Програміст не повинен писати код, що викликає конструктор класу. Усю необхідну роботу виконує компілятор. Функцією членом, що виконує дії, зворотні конструкторові, є деструктор.

Правила для деструкторів

  1. деструктор викликається при видаленні об'єкта;

  2. деструктор звичайно виконує роботу зі звільнення пам'яті, зайнятої об'єктом;

  3. деструктор має те ж ім'я, що й клас, якому він належить, з попереднім символом ~;

  4. деструктор не може мати параметрів;

  5. деструктор не може повертати значення;

  6. деструктор не успадковується;

  7. клас не може мати більш одного деструктора;

  8. якщо в класі не визначений деструктор, компілятор генерує деструктор за замовчуванням.

Програміст не повинен писати код, що викликає деструктор класу. Усю необхідну роботу виконує компілятор. Деструктор класу викликається в момент видалення об'єкта.

class Dot

{

public :

Dot ( ) { cout <<"Constructor \n"; } // конструктор

~dot ( ) { cout <<"Destructor \n"; } // деструктор

}

void main ( )

{

Dot A ; // створення об'єкта

}

Результат:

Constructor

Destructor

Якщо потрібно проініціалізувати змінні класу, використовується конструктор з параметрами.

class Dot

{

char name ; // ім'я крапки

double x, y ; // координати крапки

public:

Dot ( char Name, double X, double Y ) { name = Name ; x = X ; y = Y ; }

void Print ( ) ;

}

void Dot :: Print()

{

cout<<”koord point”<<name<<" :";

cout<<"\tx="<<x<<"\ty="<<y<<'\n';

}

void main ( )

{

Dot A ( 'A', 3, 4 ) ; // неявний виклик конструктора

Dot В= Dot ('В', 3, 4 ) ; // явний виклик конструктора

A.Print ( ) ; // виклик функції члена класу

}

Тут значення, передане в конструктор при оголошенні об'єкта A, використовується для ініціалізації закритих членів name, x і y цього об'єкта.

Список ініціалізації елементів

Звичайно дані-члени класу ініціалізуються в тілі конструктора, однак існує й інший спосіб ініціалізації – за допомогою списку ініціалізації елементів. Список ініціалізації елементів відділяється двокрапкою від заголовка визначення конструктора й містить дані - члени й конструктори базових класів, розділені комами. Для кожного елемента в круглих дужках безпосередньо за ним вказується один або кілька параметрів, використовуваних при ініціалізації. Синтаксис списку ініціалізації має вигляд:

Constrname ( parl, par2 ) : mem1 ( parl ), mem2 ( par2 ), … { …}

class Dot

{

char name ;

double x, y ;

public:

Dot ( char Name ) : name ( Name ), x ( 0 ), y ( 0 ) { }/

• • •

} ;

Хоча виконання ініціалізації в тілі конструктора або за допомогою списку ініціалізації – справа смаку програміста, список ініціалізації є єдиним методом ініціалізації для:

  1. даних-констант

  2. посилань

  3. об'єкта - члена класу, конструктор якого вимагає завдання значень одного або декількох параметрів.

C++ визначає два спеціальні види конструкторів: конструктор за замовчуванням і конструктор копіювання.