Professional Documents
Culture Documents
ООП. Питання
ООП. Питання
Відповіді:
Клас - опис об'єкта, який містить поля (атрибути) та методи (функції), які визначають поведінку
об'єкта.
Об'єкт - екземпляр класу, що має свої власні значення атрибутів та може виконувати методи класу.
Інкапсуляція - процес приховування деталей реалізації об'єкта від зовнішнього світу, що забезпечує
безпеку та захист даних.
Наслідування - процес, за допомогою якого один клас може успадковувати поля та методи від іншого
класу, що дозволяє створювати класи з новими функціональними можливостями на основі вже
існуючих класів.
Поліморфізм - здатність об'єкта з одного класу використовуватися з методами, які не є частиною його
класу, але знаходяться в класі-нащадку.
Клас визначає новий тип даних, який задає формат об'єкта. Клас містить як дані, так і коди
програм, призначені для виконання дій над ними. Клас – це базова одиниця інкапсуляції, яка
забезпечує механізм побудови об'єктів. Об'єкти – це примірники класового типу. Визначаючи клас,
оголошують ті глобальні дані, які міститимуть об'єкти, і програмні коди, які виконуватимуться над
цими даними. У класі дані оголошуються у вигляді змінних, а програмні коди оформляють у вигляді
функцій. Змінні та функції називаються членами класу. Змінну, оголошену в класі, називають членом
даних, а оголошену в класі функцію – функцією-членом класу.
Формат оголошення:
class ім'я_класу
{ private:
public:
protected:
перелік_об'єктів_класy;
У мові програмування С++ клас є шаблоном, який описує структуру даних та методи (функції), які
працюють з цими даними. Об'єкт класу - це екземпляр класу, який створюється за допомогою
ключового слова "new". Кожен об'єкт класу має свої власні значення для даних класу, а також може
викликати методи класу для роботи з цими даними. Person myPerson; // Створення об'єкту класу
Person
Конструктор – це спеціальна функція-член класу, яка викликається при створенні об'єкта, а її ім'я
обов'язково збігається з іменем класу. Його основна мета - ініціалізувати дані об'єкту. Приклад
використання конструктора:
class myClass
{ double a;
public:
};
Доповненням до конструктора слугує деструктор – це функція, яка викликається під час руйнування
об'єкта. Його основна мета - звільнити пам'ять, яку займав об'єкт. Ім'я деструктора має збігатися з
іменем конструктора, але йому передує символ "~".
Назва_конструктора();
Конструктор може мати параметри, за допомогою яких при створенні об'єкта членам-даних
(змінним класу) можна надати деякі початкові значення, які визначаються у основній функції main().
Це реалізується шляхом передачі аргументів конструктору об'єкта. Загальний формат:
5.Вбудовані функції
//...
Другий спосіб полягає у визначенні коду програми для функції-члена класу в самому
оголошенні класу. Будь-яка функція, що визначається в оголошенні класу, автоматично стає
вбудованою. У цьому випадку непотрібно передувати її оголошенню ключовим словом inline.
Масиви об'єктів можна організувати так само, як і створюються масиви значень стандартних
типів. Якщо клас містить параметризований конструктор, то масив об'єктів такого класу можна
ініціалізувати. Для ініціалізації масиву можна завжди використовувати довгий формат ініціалізації,
навіть якщо об'єкт приймає тільки один аргумент (коротка форма просто зручніша для застосування).
Загальний формат: Назва_класу назва_обєкта [ кількість ]; Неініціалізований масив - це масив, для
якого не визначено початкових значень елементів. Для створення неініціалізованого масиву потрібно
вказати його розмір, але не передавати жодного початкового значення.
Щоб отримати доступ до окремого члена об'єкта виключно "силами" самого об'єкта,
використовують оператор "крапка".( Obj.Set(1); )А якщо для цього слугує показник на цей об'єкт, то
необхідно використовувати оператор "стрілка".( p->Show(); ) Щоб оголосити показник на об'єкт,
використовується аналогічний синтаксис як і у разі оголошення показників на значення інших типів.
Інкрементація або декрементація показника відбувається так, щоб завжди вказувати на наступний
або попередній елемент базового типу. Те саме відбувається і під час інкрементування або
декрементування показника на об'єкт: він вказуватиме на наступний або попередній об'єкт.(p++; p--; )
Посилання на об'єкти - це альтернативний спосіб працювати з об'єктами, який використовує символ
& після ім'я змінної.
8.Функції-"друзі" класу
Щоб зробити функцію “другом” класу, потрібно помістити її прототип в public-розділ оголошення
класу і попередити його ключовим словом friend. функції Fun() оголошується "другом" класу myClass:
{ //...
public:
//...
};
Одна і та ж функція може бути "другом" декількох класів. Функції-"друзі" є корисними для
перевизначення операторів певних типів. Функції-"друзі" спрощують створення деяких функцій
введення-виведення.
Якщо два об'єкти мають однаковий тип (тобто обидва вони – об'єкти одного класу), то
значення членів-даних одного об'єкта можна присвоїти іншому. Якщо один об'єкт присвоюється
іншому, то за замовчуванням дані першого об'єкта порозрядно копіюються у другий. ( ObjB = ObjA; )
Щоби функція могла повернути об'єкт, по-перше, необхідно оголосити об'єкт, який
повертається нею, типом відповідного класу. По-друге, потрібно забезпечити повернення об'єкта
цього типу за допомогою звичайної настанови return.
strClass Init()
Якщо функція повертає об'єкт класу, то вона автоматично створює тимчасовий об'єкт, який
зберігає повернуте значення.
Основна причина використання конструктора копії полягає у тому, що при передачі об'єкта
функції створюється побітова (тобто точна) його копія, яка передається параметру цієї функції. Якщо у
копію об'єкта будуть внесені зміни у вміст цієї області пам'яті, то ці зміни стосуватимуться також
оригінального об'єкта. Формат конструктора копії об'єкта:
У цьому записі елемент &obj означає посилання на об'єкт, який використовується для
ініціалізації іншого об'єкта.
Конструктор копії часто викликається тоді, коли один об'єкт використовується для ініціалізації іншого.
{ … }
При передачі об'єкта функції як аргумента створюється побітова копія цього об'єкта. Якщо у класі
визначено конструктор копії, то саме він і викликається для створення такої копії.
Операторні функції-члени класу в С++ є спеціальним видом функцій, які використовуються для
перевантаження операторів. Вони викликаються при виконанні певних операцій, наприклад,
арифметичних, порівняння, копіювання. Операторна функція-член має наступний вигляд:
... // Операції
Операторна функція може бути членом класу або не бути ним. Операторні функції, які не є
членами класу, визначаються як його "друзі". Операторні функції-члени і не члени класу
відрізняються між собою механізмом перевантаження.
void Fun();
Конструктори похідних класів С++ виконуються після виконання конструктора базового класу. Їх
основна мета - ініціалізувати дані, що відносяться до похідного класу. При ієрархії класів спочатку
викликається конструктор базового класу потім похідний 1, 2, … ,n.
При множинному наслідуванні спочатку викликається конструктор базового класу 1,2,…,n, а потім
похідного.
Під терміном поліморфізм розуміють механізм реалізації функції, у якому різні результати можна
отримати за допомогою одного її імені. Основою для динамічного поліморфізму слугує показник на
базовий клас. Вказівники на похідні типи дозволяють працювати з об'єктами похідних класів за
допомогою вказівників на їх базові класи. Це корисно, коли потрібно працювати з колекцією об'єктів,
які можуть бути різних типів. Для цього необхідно використовувати вказівники на базовий клас і
використовувати віртуальні функції, щоб забезпечити правильну поведінку об'єктів під час виконання
програми.
Якщо функція оголошується віртуальною, то вона залишається такою незалежно від того,
через скільки рівнів похідних класів вона може пройти.
{ public:
При наслідуванні класів від базового класу, віртуальні функції можуть бути успадковані в
похідному класі. Коли функція викликається через вказівник на базовий клас, виклик буде
перенаправлений до відповідної віртуальної функції у похідному класі.
Щоб передати аргументи конструктору базового класу необхідно використовувати розширену форму
оголошення конструктора похідного класу, у якому передбачено можливість передачі аргументів
одному або декільком конструкторам базового класу.
Формат:
конструктор_похідного_класу (перелік_аргументів):
baseA(перелік_аргументів),
baseB(перелік_аргументів),
............
baseN(перелік_аргументів)
Шаблони дають змогу – створювати програмний код, який можна використовувати для оброблення
різних типів даних. Узагальнена функція визначає загальний набір операцій, які згодом
використовуватимуться для оброблення даних різних типів. Тип даних, який обробляється функцією,
передається їй як параметр. Формат:
// тіло функції
20.Узагальнені класи
// Тіло класу
};
Узагальнені (шаблонні) класи є одним з ключових функціональних елементів мови
програмування С++. Узагальнені класи дозволяють створювати класи, які можуть працювати з
різними типами даних, а не тільки з одним.
Узагальнені класи С++ позначаються ключовим словом template, за яким слідує список параметрів
шаблону, який включає імена типів даних, що будуть використовуватися в класі. Узагальнені класи
можуть містити будь-який код класу, включаючи поля даних, методи та конструктори.
try
catch(aType arg)