You are on page 1of 8

екзаменаційні питання

для комплексного державного іспиту

з предмету ««Об'єктно-орієнтоване програмування»»

1. Основні визначення ООП. Основні принципи ООП.


2. Базові поняття класу в С++.
3. Об'єкти класів в С++
4. Конструктори та деструктори. Особливості перевантаження конструкторів. Параметризовані
конструктори
5. Вбудовані функції
6. Масиви об'єктів. Ініціалізовані та неініціалізовані масиви
7. Вказівники на об'єкти. Посилання на об'єкти
8. Функції-"друзі" класу
9. Присвоєння функціями. об'єктів. Передача об'єктів функціям. Повернення об'єктів
10. Створення та використання конструктора копії
11. Створення операторної функції-члена класу
12. Перевантаження операцій в С++.
13. Наслідування. Механізм доступу до членів базового класу
14. Конструктори похідних класів
15. Множинне наслідування. Захищене наслідування
16. Поліморфізм. Вказівники на похідні типи
17. Віртуальні функції. Наслідування віртуальних функцій
18. Передача параметрів конструкторам базового класу
19. Шаблони. Загальна характеристика. Перевантаження шаблонної функції
20. Узагальнені класи
21. Обробка виняткових ситуацій
22. Поняття "потоків" у мові програмування С++

Відповіді:

1.Основні визначення ООП. Основні принципи ООП

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

Об'єкт - екземпляр класу, що має свої власні значення атрибутів та може виконувати методи класу.

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

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

Поліморфізм - здатність об'єкта з одного класу використовуватися з методами, які не є частиною його
класу, але знаходяться в класі-нащадку.

2.Базові поняття класу в С++.

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

Формат оголошення:

class ім'я_класу

{ private:

закриті дані та функції класу

public:

відкриті дані та функції класу

protected:

захищені дані та функції класу

перелік_об'єктів_класy;

public,private,protected – модифікатори доступу.

3.Об'єкти класів в С++

У мові програмування С++ клас є шаблоном, який описує структуру даних та методи (функції), які
працюють з цими даними. Об'єкт класу - це екземпляр класу, який створюється за допомогою
ключового слова "new". Кожен об'єкт класу має свої власні значення для даних класу, а також може
викликати методи класу для роботи з цими даними. Person myPerson; // Створення об'єкту класу
Person

4.Конструктори та деструктори. Особливості перевантаження конструкторів. Параметризовані


конструктори

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

class myClass

{ double a;

public:

myClass(); // Оголошення конструктора

void Get(double a); // Введення в об'єкт значення

double Put(); // Виведення з об'єкта значення

};

Доповненням до конструктора слугує деструктор – це функція, яка викликається під час руйнування
об'єкта. Його основна мета - звільнити пам'ять, яку займав об'єкт. Ім'я деструктора має збігатися з
іменем конструктора, але йому передує символ "~".

Перевантаження конструкторів подібне до перевантаження функцій. Воно потрібне для вибору


найбільш підходящого способу ініціалізації об’єкта.

Назва конструктора це назва класу.


Загальний формат перевантаження конструктора:

Назва_конструктора();

Назва_конструктора(int a, int b);

Назва_конструктора(float c, char d);

Конструктор може мати параметри, за допомогою яких при створенні об'єкта членам-даних
(змінним класу) можна надати деякі початкові значення, які визначаються у основній функції main().
Це реалізується шляхом передачі аргументів конструктору об'єкта. Загальний формат:

тип_класу ім'я_об'єкта(перелік_аргументів); У цьому записі елемент перелік_аргументів вказує на те,


що усі аргументи, які передаються конструктору, розділені між собою комами.

5.Вбудовані функції

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


програми, з якого вона викликається, тобто виклик такої функції замінюється її кодом. До вбудованих
функцій С++ відносяться математичні функції, такі як abs(), sqrt(), sin(), cos(). Існує два способи
створення вбудованої функції . Для першого способу використовують модифікатор inline. Функція
Fun(), яка повертає int-значення і не приймає жодного параметра:

inline int Fun()

//...

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

6.Масиви об'єктів. Ініціалізовані та неініціалізовані масиви

Масиви об'єктів можна організувати так само, як і створюються масиви значень стандартних
типів. Якщо клас містить параметризований конструктор, то масив об'єктів такого класу можна
ініціалізувати. Для ініціалізації масиву можна завжди використовувати довгий формат ініціалізації,
навіть якщо об'єкт приймає тільки один аргумент (коротка форма просто зручніша для застосування).
Загальний формат: Назва_класу назва_обєкта [ кількість ]; Неініціалізований масив - це масив, для
якого не визначено початкових значень елементів. Для створення неініціалізованого масиву потрібно
вказати його розмір, але не передавати жодного початкового значення.

7.Вказівники на об'єкти. Посилання на об'єкти

Щоб отримати доступ до окремого члена об'єкта виключно "силами" самого об'єкта,
використовують оператор "крапка".( Obj.Set(1); )А якщо для цього слугує показник на цей об'єкт, то
необхідно використовувати оператор "стрілка".( p->Show(); ) Щоб оголосити показник на об'єкт,
використовується аналогічний синтаксис як і у разі оголошення показників на значення інших типів.
Інкрементація або декрементація показника відбувається так, щоб завжди вказувати на наступний
або попередній елемент базового типу. Те саме відбувається і під час інкрементування або
декрементування показника на об'єкт: він вказуватиме на наступний або попередній об'єкт.(p++; p--; )
Посилання на об'єкти - це альтернативний спосіб працювати з об'єктами, який використовує символ
& після ім'я змінної.
8.Функції-"друзі" класу

Щоб зробити функцію “другом” класу, потрібно помістити її прототип в public-розділ оголошення
класу і попередити його ключовим словом friend. функції Fun() оголошується "другом" класу myClass:

class myClass // Оголошення класового типу

{ //...

public:

friend void Fun(myClass obj); // "Дружня" функція класу

//...

};

Одна і та ж функція може бути "другом" декількох класів. Функції-"друзі" є корисними для
перевизначення операторів певних типів. Функції-"друзі" спрощують створення деяких функцій
введення-виведення.

9.Присвоєння функціями. об'єктів. Передача об'єктів функціям. Повернення об'єктів

Якщо два об'єкти мають однаковий тип (тобто обидва вони – об'єкти одного класу), то
значення членів-даних одного об'єкта можна присвоїти іншому. Якщо один об'єкт присвоюється
іншому, то за замовчуванням дані першого об'єкта порозрядно копіюються у другий. ( ObjB = ObjA; )

За замовчуванням усі значення членів-даних з одного об'єкта присвоюються іншому шляхом


створення порозрядної копії. Об'єкти передаються функціям шляхом використання звичайного С++-
погодження про передачу параметрів за значенням.

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

strClass Init()

{ strClass obj; … return obj; }

Якщо функція повертає об'єкт класу, то вона автоматично створює тимчасовий об'єкт, який
зберігає повернуте значення.

10.Створення та використання конструктора копії

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

ім'я_класу (const ім'я_класу &obj)

{ // Тіло конструктора копії }

У цьому записі елемент &obj означає посилання на об'єкт, який використовується для
ініціалізації іншого об'єкта.

Конструктор копії часто викликається тоді, коли один об'єкт використовується для ініціалізації іншого.

myClass(int c) // Визначення звичайного конструктора

{ … }

myClass(const myClass &obj) // Визначення конструктора копії


{…}

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

11.Створення операторної функції-члена класу

Операторні функції-члени класу в С++ є спеціальним видом функцій, які використовуються для
перевантаження операторів. Вони викликаються при виконанні певних операцій, наприклад,
арифметичних, порівняння, копіювання. Операторна функція-член має наступний вигляд:

тип_повертаємого_значення імя_класу::operator# (список-аргументів)

... // Операції

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

12.Перевантаження операцій в С++.

Перевантаження операторів в С++ - це механізм, який дозволяє використовувати стандартні


оператори для роботи з користувацькими типами даних. Це означає, що ви можете перевантажити
оператори такі як +, -, *, / та інші для виконання операцій з об'єктами класів. Перевантаження функцій
відбувається за допомогою збільшення чи зменшення кількості параметрів, проте без зміни імені
функції.

Розглянемо на прикладі функції Fun.

void Fun();

void Fun(int a);

void Fun(float b, char c);

13.Наслідування. Механізм доступу до членів базового класу

Наслідування – один з трьох фундаментальних механізмів об'єктно-орієнтованого програмування,


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

class ім'я_похідного_класу : доступ ім'я_базового_класу

тіло нового класу

14.Конструктори похідних класів

Конструктори похідних класів С++ виконуються після виконання конструктора базового класу. Їх
основна мета - ініціалізувати дані, що відносяться до похідного класу. При ієрархії класів спочатку
викликається конструктор базового класу потім похідний 1, 2, … ,n.
При множинному наслідуванні спочатку викликається конструктор базового класу 1,2,…,n, а потім
похідного.

15.Множинне наслідування. Захищене наслідування

Множинне наслідування С++ - це механізм, що дозволяє похідному класу успадкувати


функціональність від декількох базових класів. У мові С++ це здійснюється за допомогою ключового
слова public, protected або private. Основні концепції множинного наслідування: •При множинному
успадкуванні похідний клас одержує атрибути двох або більш класів. •При використовуванні
множинного наслідування для породження класу конструктор похідного класу повинен викликати
конструктори всіх базових класів. •При породженні класу з похідного класу утворюється ієрархія
наслідування (ієрархія класів).

Захищене наслідування С++ - це механізм, який дозволяє похідному класу успадкувати


функціональність від базового класу з обмеженим доступом до його інтерфейсу. У мові С++ це
здійснюється за допомогою ключового слова protected. Якщо член класу оголошений з
використанням специфікатора доступу protected, то він не буде доступним для інших елементів
програми, які не є членами цього класу. Доступ до захищеного члена є ідентичним механізму доступу
до закритого члена, тобто до нього можуть звертатися тільки інші члени того ж самого класу.
Використовуючи специфікатор доступу protected, можна створити члени класу, які закриті у межах
свого класу, але можуть успадковуватися похідним класом з отриманням доступу до себе.

16.Поліморфізм. Вказівники на похідні типи

Під терміном поліморфізм розуміють механізм реалізації функції, у якому різні результати можна
отримати за допомогою одного її імені. Основою для динамічного поліморфізму слугує показник на
базовий клас. Вказівники на похідні типи дозволяють працювати з об'єктами похідних класів за
допомогою вказівників на їх базові класи. Це корисно, коли потрібно працювати з колекцією об'єктів,
які можуть бути різних типів. Для цього необхідно використовувати вказівники на базовий клас і
використовувати віртуальні функції, щоб забезпечити правильну поведінку об'єктів під час виконання
програми.

baseClass *p; // Створення показника на об'єкт базового типу

baseClass ObjB; // Створення об'єкта базового типу

p = &ObjB; // Показник p вказує на об'єкт типу baseClass

17.Віртуальні функції. Наслідування віртуальних функцій

Віртуальна функція – це така функція, яка оголошується в базовому класі з використанням


ключового слова virtual і перевизначається в одному або декількох похідних класах. при вказанні на
різні об'єкти викликатимуться і різні версії віртуальної функції. Функція оголошується віртуальною в
базовому класі за допомогою ключового слова virtual.

class baseClass { public:

// Оголошення віртуальної функції

virtual void Show() { cout << "bazovuj klass." << endl; } };

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

class secondD : public firstD

{ public:

// Перевизначення функції Show() для класу secondD.


void Show() { cout << "Другий похідний клас." << endl; } };

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

18.Передача параметрів конструкторам базового класу

Щоб передати аргументи конструктору базового класу необхідно використовувати розширену форму
оголошення конструктора похідного класу, у якому передбачено можливість передачі аргументів
одному або декільком конструкторам базового класу.

Формат:

конструктор_похідного_класу (перелік_аргументів):

baseA(перелік_аргументів),

baseB(перелік_аргументів),

............

baseN(перелік_аргументів)

тіло конструктора похідного класу

19.Шаблони. Загальна характеристика. Перевантаження шаблонної функції

Шаблони дають змогу – створювати програмний код, який можна використовувати для оброблення
різних типів даних. Узагальнена функція визначає загальний набір операцій, які згодом
використовуватимуться для оброблення даних різних типів. Тип даних, який обробляється функцією,
передається їй як параметр. Формат:

template <class tType> тип ім'я_функції (перелік_параметрів)

// тіло функції

Перевантаження шаблонної функції відбувається із зміною кількості параметрів чи зміною типу


параметрів, а також вже без написання template <class tType>, для того щоб програма працювала
більш коректно. Наприклад

template <class tType> void A(tType &a, tType &b){//код}

void A(int a, char b){//код}

20.Узагальнені класи

Загальний формат оголошення узагальненого класу має такий вигляд:

template <class tType> class ім'я_класу

// Тіло класу

};
Узагальнені (шаблонні) класи є одним з ключових функціональних елементів мови
програмування С++. Узагальнені класи дозволяють створювати класи, які можуть працювати з
різними типами даних, а не тільки з одним.

Узагальнені класи С++ позначаються ключовим словом template, за яким слідує список параметрів
шаблону, який включає імена типів даних, що будуть використовуватися в класі. Узагальнені класи
можуть містити будь-який код класу, включаючи поля даних, методи та конструктори.

21.Обробка виняткових ситуацій

Виняткова ситуація – це помилка, яка виникає у процесі виконання програми. Їх виникнення


під час роботи коду програми автоматично призводить до виклику так званого обробника винятків.
При цьому програміст не забезпечує перевірку результату виконання кожної конкретної операції або
функції "вручну". Керування С++-механізмом оброблення винятків тримається на трьох ключових
словах: try, catch і throw. Вони утворюють взаємопов'язану підсистему, у якій використання одного з
них припускає застосування іншого. Оброблення винятків-це системні засоби, за допомогою яких
програма може справитися з помилками тривалості виконання. Загальний формат try- і catch-блоків:

try

// try-блок (блок коду програми, що підлягає перевірці на наявність помилок)

catch(aType arg)

{ // catch-блок (обробник винятків типу aType) }

22.Поняття "потоків" у мові програмування С++

Потік (stream) – це загальний логічний інтерфейс з різними пристроями, з яких складається


комп'ютер. Потік або синтезує інформацію, або споживає її, після чого зв'язується з будь-яким
фізичним пристроєм за допомогою С++-системи введення-виведення. Оскільки різні потоки діють
однаково, то практично до всіх типів пристроїв можна застосувати одні і ті ж самі функції та
оператори введення-виведення.

You might also like