- •2. Інтегроване середовище розробки Delphi: призначення і загальний опис середовища
- •3. Загальна організація програми в Delphi
- •4. Деякі довідкові відомості для роботи у середовищі Delphi
- •Цикл (программирование)
- •[Править]Определения
- •[Править]Виды циклов [править]Безусловные циклы
- •[Править]Цикл с предусловием
- •[Править]Цикл с постусловием
- •[Править]Цикл с выходом из середины
- •[Править]Цикл со счётчиком
- •[Править]Совместный цикл
- •[Править]Досрочный выход и пропуск итерации
- •[Править]Досрочный выход из цикла
- •[Править]Пропуск итерации
- •[Править]Необходимость
- •[Править]Вложенные циклы
- •[Править]Циклы с несколькими охраняемыми ветвями [править]Цикл Дейкстры
- •[Править]Цикл «паук»
- •[Править]Интересные факты
- •3.1 Інкапсуляція
- •3.2 Класи, компоненти і об'єкти
- •3.3 Спадкоємство
- •3.4 Розробка класів
- •3.4.1 Оголошення базового класу
- •3.4.2 Конструктори і деструкції
- •3.4.3 Оголошення похідних класів
- •3.5 Поліморфізм
- •3.5.1 Віртуальні функції
- •3.5.2 Дружні функції
- •3.6.1 Компоненти
- •3.6.1.1 Оголошення компонентних класів
- •3.6.1.2 Оголошення властивостей
- •3.6.1.3 Оголошення обробників подій
- •3.6.1.4 Оголошення автоматизованих властивостей і методів
- •3.6.1.5 Швидкий виклик функцій
- •3.6.1.6 Розширені типи даних Delphi
3.4.2 Конструктори і деструкції
Як випливає з назв, конструктор - це метод, який будує в пам'яті об'єкт даного класу, а деструкція - це метод, який його видаляє. Конструктори і деструкції відрізняються від інших об'єктних методів наступними особливостями:
• Мають ім'я, ідентичне імені свого класу.
• Не мають іншого значення.
• Не можуть успадковуватися, хоча похідний клас може викликати конструктори і деструкції базового класу.
• Автоматично генеруються компілятором як public якщо не були вами оголошені інакше.
• Автоматично викликаються компілятором, щоб гарантувати належне створення і знищення об'єктів класів.
• Можуть містити неявні звернення до операторів new і delete якщо об'єкт вимагає виділення і знищення динамічної пам'яті.
Лістинг 3.4 демонструє узагальнений синтаксис оголошень конструкторів і деструкції.
class className
{ public:
// Інші члени даних className (); // Конструктор за умовчанням | className(<список параметрів;-);// Конструктор з аргументами | className(const className&); // Конструктор копіювання
// Інші конструктори "className (); // Деструкція
// Інші методи };
Лістинг 3.4. Оголошення конструкторів і деструкції.
Клас може містити будь-яке число конструкторів, зокрема жодного. Конструктори не можуть бути оголошені віртуальними. Не поміщайте всі конструктори в захищеній секції і прагніть зменшити їх число, використовуючи значення аргументів за умовчанням. Існує три види конструкторів:
• Конструктор за умовчанням не має параметрів. Якщо клас не містить жодного конструктора, компілятор автоматично створить один конструктор за умовчанням, який просто виділяє пам'ять при створенні об'єкту свого класу.
• Конструктор з аргументами дозволяє ініціалізувати об'єкт у момент його створення - викликати різні функції, виділяти динамічну пам'ять, привласнювати змінним початкові значення і тому подібне.
• Конструктор копіювання призначений для створення об'єктів даного класу шляхом копіювання даних з іншого, вже існуючого об'єкту цього класу. Такі конструктори особливо доцільні для створення копій об'єктів, які моделюють динамічні структури даних. Проте, за умовчанням компілятор створює так звані конструктори поверхневого копіювання (shallow copy constructors), які копіюють тільки члени даних. Тому якщо якісь члени даних містять покажчики, самі дані не копіюватимуться. Для реалізації "глибокого" копіювання в код конструктора треба включити відповідні інструкції.
Клас може оголосити тільки один загальнодоступну деструкцію, імені якої, ідентичному імені свого класу, повинен передувати знак ~ (тильда). Деструкція не має параметрів і може бути оголошена віртуальною. Якщо клас не містить оголошення деструкції, компілятор автоматично створить його.
Зазвичай деструкції виконують операції, зворотні тим, що виконували відповідні конструктори. Якщо ви створили об'єкт класу файл, то в деструкції цей файл, можливо, закриватиметься. Якщо конструктор класу виділяє динамічну пам'ять для масиву даних (за допомогою оператора new), то деструкція, можливо, звільнить виділену пам'ять (за допомогою оператора delete) і тому подібне.