Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП_Лаб_Гриф.doc
Скачиваний:
7
Добавлен:
14.11.2019
Размер:
2.81 Mб
Скачать

Питання для контролю і самостійної роботи

  1. Дайте визначення поняттям: об'єкт, клас, дані-члени класу, функції-члени класу.

  2. У чому відмінність між класом і об'єктом класу ?

  3. Чи можна визначити функцію усередині класу ?

  4. Чи можна використовувати в різних класах однакові імена даних і функцій-членів, поясніть чому так чи ні ?

  5. Які класи пам'яті можна використовувати при оголошенні об'єктів ?

  6. Чи можна використовувати класи пам'яті при оголошенні членів класу, які і чому ?

  7. Що означає термін інкапсуляція ?

  8. Як виконується керування доступом до елементів класу ?

  9. Що означають специфікатори доступу: public, protected, private ?

  10. Назвіть специфікатор доступу за умовчанням до членів класу і структури.

  11. Чи обмежується кількість і порядок розташування розділів у класі ?

  12. Назвіть особливості використання статичних (static) членів класу.

  13. Для чого використовується оператор дозволу області видимості (::) ?

  14. Чи можуть структури містити функції як елементи ?

  15. Чи можуть структури і класи бути вкладеними ?

  16. Яка область дії членів класу ?

  17. Як одержати доступ до статичних членів класу з програми ?

  18. Як одержати доступ до приватних членів класу з програми ?

  19. Як одержати доступ до відкритих членів класу з програми ?

  20. Чи можна оголосити тип у тілі класу при оголошенні класу ?

Заняття№21 Використання конструкторів і деструкторів у класах

(2 години)

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

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

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

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

  1. Вони мають ім'я, що збігається з ім'ям класу (деструктори із символом тильди ~ )

  2. Конструкторів може бути декілька, у тому числі конструктор за умовчанням, деструктор може бути тільки один.

  3. Вони не мають оголошень типів значень, що повертаються, навіть void.

  4. Вони не можуть бути успадкованими, хоча похідний клас може викликати конструкторы і деструктор базового класу.

  5. Конструктори, як і більшість функцій мови С++, можуть мати аргументи за умовчанням чи використовувати списки ініціалізації аргументів.

  6. Деструктори можуть мати атрибут virtual, але конструктори не можуть.

  7. Не можна працювати з адресами цих функцій.

Приклад

void *ptr = base::base( ); //Неприпустимо, base( ) - функція-конструктор

//класу base, а також не повертає значення

  1. Викликати конструктор тим же чином, що і звичайну функцію, не можна. Виклик деструктора допустимий тільки з цілком уточненим ім'ям.

Приклади

X *p; // Покажчик на клас Х

X x; // Оголошення об'єкта х класу Х

p = &x; // Покажчик p зберігає адресу об'єкта х

p -> X:: ~X( ); // Припустимий виклик деструктора

X::X( ); // Неприпустимий виклик конструктора

  1. При оголошенні об'єктів компілятор викликає один з конструкторів автоматично.

  2. Аналогічно при знищенні об'єктів компілятор автоматично викликає деструктор.

  3. Конструктори і деструктори при необхідності динамічного виділення пам'яті для об'єкта можуть виконувати виклики операторів new і delete.

  4. Конструктор створює об'єкт х і виконує ініціалізацію його даних-членів. При копіюванні об'єкта даного класу відбувається неявний виклик відповідного конструктора. Дані-члени об'єкта класу, у якого всі елементи загальнодоступні (public) і без конструкторів базових класів (звичайно це структура) можуть виконувати ініціалізацію за допомогою списку ініціалізаторів. Деструктор руйнує об'єкт класу, створений конструктором, коли цей об'єкт виходить з області видимості. Конструктори глобальних об'єктів викликаються до виклику функції main( ). Локальні об'єкти створюються, як тільки стає активною область дії (видимості) об'єкта. При цьому конструктор викликається щораз.

Приклад

class Х

{...public:

X( ); // Конструктор класу Х за умовчанням

Х(const X&); // Конструктор копіювання, в нього передається

// посилання на Х

~X( ); // Деструктор класу Х

};

Формальні параметри конструктора при його оголошенні можуть бути будь-якого типу, за винятком класу, елементом якого є даний конструктор. Конструктор копіювання приймає як параметр посилання на свій власний клас. Конструктор, що не приймає параметрів, називається конструктором за умовчанням: Х::Х( ).

Як і усі функції-члени, конструктори можуть мати аргументи, які використовуються за умовчанням. Наприклад, можливі наступні оголошення конструкторів у класі (таблиця 21.1).

Таблиця 21.1- Приклади оголошення класу і визначення конструкторів

Оголошення класу

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

class X

{ int і, j; // За умовчанням private

public:

X( ); // Конструктор за умовчанням

X(int ); // Перевантажені конструктори

X(int, int ); // можуть викликатися c одним

// X(int) чи двома X(int, int) аргументами

X(int а = 5, int у= 6); //Може викликатися без

//аргументів, з одним чи двома аргументами

X(const Х&); // Конструктор копіювання

};

Х::Х ( ) { і = 0; j = 0; }

Х::Х(int a )

{ і = a; j = 0; }

Х::Х(int a, int b)

{ i = a; j = b; }

Х х; //Оголошення

//об'єкта х, викликається

//конструктор за

//умовчанням