Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_OOP_.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
514.56 Кб
Скачать

Оформлення звіту:

  1. Титульний лист.

  2. Мета роботи.

  3. Порядок виконання.

  4. Представлення основних результатів по виконаній лабораторній роботі.

  5. Висновки.

Контрольні питання

  1. Принципи композиції класів.

  2. Принципи композиції об’єктів.

  3. Вкладеність класів.

  4. Дружні функції.

  5. Перевантаження методів класу та операцій.

Список рекомендованої літератури

  1. Львов М.С., Співаковський О.В. Основи алгоритмізації та програмування. Навч. посібник. - Херсон: Айлант. 2000. -214 с.

  2. Бадд Т. Обьектно-ориентированное программирование в действии / пер. с англ. - СПб.Литер, 1997.- 464 с. ил.

  3. Буч Г. Обьектно-ориентированньїй анализ и проектирование с примерами приложений на C++, 2-ое изд./пер. с англ.- М.: «Издательство Бином», СПб.: «Невский диалект», 1998 - 560 с, ил..

Лабораторна робота № 3

КОНСТРУКТОРИ ТА ДЕСТРУКТОРИ

Мета роботи: навчитись використовувати конструктори та деструктори при роботі з класами.

Короткі теоретичні відомості

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

Конструктор — це особливий метод, що має ім'я, співпадаюче з ім'ям класу. Призначенням конструктора є створення і ініціалізація об'єктів.

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

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

клас::клас(параметри)

Конструктори, так само як і звичайні методи, можна перенавантажувати. Зазвичай розрізняють три види конструкторів:

  • конструктор без аргументів (конструктор за замовчуванням);

  • конструктор ініціалізації;

  • конструктор копіювання (з одним параметром визначуваного класу).

За відсутності в класі явно певних конструкторів автоматично створюються конструктор без аргументів (конструктор за замовчуванням) і конструктор копіювання. Створюваний автоматично конструктор без аргументів має вигляд

клас::клас(){}

Конструктор копіювання автоматично створюється у такому вигляді:

клас::клас (const, клас &r)

{ this = r; }

Аргументом конструктора копіювання завжди є об'єкт свого класу. Ці конструктори забезпечують оголошення об'єктів без ініціалізації і з ініціалізацією іншим об'єктом того ж типу:

date d// конструктор без аргументів

date t(d)// конструктор копіювання

date r=t// конструктор копіювання

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

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

Конструктор ініціалізації забезпечує оголошення і ініціалізацію змінних:

time t(12:59:59), s(13.45), u = 14;

Конструктор ініціалізації може викликатися явно:

time R = time(10)// явний виклик конструктора

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

time *а = new time;// конструктор без аргументів

time *b = new time():// конструктор без аргументів

time *d = new time(12.23);// конструктор ініціалізації

time *f = new time(*d);// конструктор копіювання

Конструктори забезпечують звичну форму оголошення констант:

const time d2(100,67)// конструктор ініціалізації

const time d0 = 100// конструктор ініціалізації

const time d5 = time(100)// явний виклик

Конструктор ініціалізації забезпечує ініціалізацію масиву:

Конструктор ініціалізації забезпечує ініціалізацію масиву:

timeТ[3] - { 1.2.3 };

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

time Т[0]=time(1);

time Т[1]=time(2);

time Т[2]=time(3);

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

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

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

Конструктори і параметри

Конструктор копіювання викликається неявним чином при передачі у функцію параметра-об'єкту по значенню і при поверненні значення з функції. При інших способах передачі параметра конструктор копіювання не викликається (лістинг 2.4).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]