Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5.doc
Скачиваний:
7
Добавлен:
21.02.2016
Размер:
166 Кб
Скачать
☆

Деструктори

Особливий вид функції-члена, який виконує функцію, зворотну конструктору, тобто знищує об'єкт. Для статичних елементів конструктор викликається автоматично, коли об'єкт виходить із зони видимості. Якщо об'єкт локальний, деструкція викликається при виході з блоку, де він оголошений. Якщо об'єкт глобальний, деструкція викликається автоматично при виході з main. Якщо об'єкт створений через покажчик, деструкція викликається при використанні операції delete. Ім'я деструкції співпадає з ім'ям класу.

Формат опису деструкції

~ < ім'я класу > ( ) { };

Властивості деструкцій:

  • Деструкція ніколи не має аргументів.

  • Деструкція не повертає ніяких значень.

  • Деструкція не може бути оголошений як const або static.

  • Деструкція не успадковується.

  • Не можна визначити покажчик на деструкцію.

  • Якщо деструкція усередині класу не визначена явно, то компілятор автоматично створює порожню деструкцію.

  • Деструкцію потрібно явно указувати в класах, які містять покажчики на пам'ять, що виділяється автоматично.

  • Деструкцію необхідно явно задавати для динамічних об'єктів.

  • Якщо програміст працює з динамічними об'єктами, виклик деструкції здійснюється при виконанні операції delete, а при виході з області дії він не викликається автоматично.

Статичні елементи класу.

За допомогою модифікатора static можна описати статичні поля і методи класу. Їх можна розглядати як глобальні змінні або функції, доступні тільки в межах області класу.

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

Особливості статичних полів:

  • Пам'ять під статичні поля виділяється один раз при його ініціалізації незалежно від числа створених об'єктів (і навіть при їх відсутності) і ініціалізувався за допомогою операції доступу до області дії, а не операції вибору.

class A {

public:

static int count; // оголошення в класі

};

....

int A :: count; // визначення в глобальній області

// за умовчанням ініціалізувався нулем

// int A :: count =10; // приклад ініціалізації довільним значенням.

  • Статичні поля доступні як через ім'я класу, так і через ім'я об'єкту.

А *а, b;

....

cout << A :: count <<a->count<<b.count; // буде виведене одне і те ж.

  • На статичні поля розповсюджується дія специфікатора доступу, тому статичні поля, описані, як private, не можна змінити за допомогою операції доступу до області дії, як було описано вищим. Це можна зробити тільки за допомогою статичних методів.

  • Пам'ять, займана статичним полем, не враховується при визначенні розміру об'єкту за допомогою операції sizeof.

Статичні методи

Статичні методи призначені для звернення до статичних полів класу. Вони можуть звертатися безпосередньо тільки до статичних полів і викликати тільки інші статичні методи класу, тому що їм не передається прихований покажчик this. Звернення до статичних методів проводиться також, як і до статичних полів – або через ім'я класу, або, якщо хоч би один об'єкт класу вже створений, через ім'я об'єкту.