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

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

Читайте также:
  1. Конструктори і селектори

Як випливає з назв, конструктор - це метод, який будує в пам'яті об'єкт даного класу, а деструкція - це метод, який його видаляє. Конструктори і деструкції відрізняються від інших об'єктних методів наступними особливостями:

• Мають ім'я, ідентичне імені свого класу.

• Не мають іншого значення.

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

• Автоматично генеруються компілятором як public якщо не були вами оголошені інакше.

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

• Можуть містити неявні звернення до операторів new і delete якщо об'єкт вимагає виділення і знищення динамічної пам'яті.

Лістинг 3.4 демонструє узагальнений синтаксис оголошень конструкторів і деструкції.

class className

{ public:

// Інші члени даних className (); // Конструктор за умовчанням | className(<список параметрів;-);// Конструктор з аргументами | className(const className&); // Конструктор копіювання

// Інші конструктори "className (); // Деструкція

// Інші методи };

Лістинг 3.4. Оголошення конструкторів і деструкції.

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

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

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

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

Клас може оголосити тільки один загальнодоступну деструкцію, імені якої, ідентичному імені свого класу, повинен передувати знак ~ (тильда). Деструкція не має параметрів і може бути оголошена віртуальною. Якщо клас не містить оголошення деструкції, компілятор автоматично створить його.

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


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.)