Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Конструктор не повертає значення, не наслідує, не може бути оголошений як const,virtual, volatile або static.






Деструктор вирішує задачу, обернену задачі конструктора. Він викликається тоді, коли об’єкт винищується. Ім’я деструктора складається із знака “~“ та імені класу. Наприклад, ~date().

Деструктор не має аргументів, не повертає значення, не наслідується, не може бути оголошений як const, volalite або static. Деструктор може бути оголошений як virtual.

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

Приклад класу – список в динамічній пам’яті.

#include < alloc.h>

class list {

void *info;

list *next;

public:

list (void*);

list ();

~list ();

void add (void*);

};

Даний клас реалізує рекурсивну структуру даних. Рекурсивність цього класу полягає в тому, що перелік розглядається як вказівник на деяку інформацію в динамічній пам’яті (поле info) та вказівник на перелік, тільки більш короткий (поле next). В окремому випадку одноелементного переліку цей вказівник дорівнює NULL.

list:: list () {info – 0; next = 0}

 

Це конструктор, в якому отримують нульові значення за правилами присвоювання.

list:: list (void* p): info (p), next = 0 { }

 

У цьому конструкторі в поле info заноситься вказівник на деяку інформацію, яка вже розташована в пам’яті. Різниця від першого конструктора полягає в тому, що поля отримують значення за правилами ініціалізації. У цьому випадку це зроблено тільки для демонстрації такої можливості і не має деякої необхідності.

list:: list () {

delete info;

delete next;

}

Це деструктор, який звільнює усю динамічну пам’ять, яку займає перелік. Деструктор рекурсивний, тому що оператор delete next; автоматично викликає деструктор класу для переліку, на який вказує next та інші, поки не настане час, коли в черговому полі next не з’явиться NULL. У цьому випадку операція завершиться невдачею, і деструктор не буде викликаний.

Void list:: add (void* p) {

list *1 = new list (p);

l–> next = next;

next = 1;

}

 

Цей метод додає один елемент до переліку. Спочатку оператор

list *1 = new list (p);

створює перелік з одного елемента, а потім декілька операторів

l–> next = next;

next = 1;

“влаштовують” цей елемент відразу за головним елементом переліку.

Void main () {

list *L = new list (“123456789”);

int *q = new int, *q=10;

L–> add (q);

delete L;

}

Головна програма демонструє створення одноелементного переліку,

list *L = new list (“123456789”);

додання до нього другого елемента

int *q = new int, *q=10;

L–> add (q);

та вилучення переліку з пам’яті

delete L;

Вказівник на себе. Кожний об’єкт має вказівник на себе, який позначається ідентифікатором this. Він є скритим параметром кожної функції-компоненти. Для об’єкта list вказівник this має тип:

list *const this

Функцію-компоненту можна оголосити так, щоб поля об’єкта були доступні не тільки для читання

Int readme () const {/* тіло функції */}

Вказівник this, що предавається такою функцією має тип:

Const list *this.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.