Курсовая работа: Побудова і використання класів
//прототип функції без параметрів,
//який повертає значення типа complex
Інша форма явного виклику конструктора приводить до створення об’єкту, який не має імені. Створений таким чином об’єкт без імені можна використовувати у тих виразах, де можна використовувати об’єкт даного класу. Наприклад:
complexzz = complex (4.0, 5.0); //zz.real = 4.0; zz.imag = 5.0;
Динамічне виділення пам’яті для об’єктів якого-небудь класу створює необхідність у звільнені цієї пам’яті при знищенні об’єкту. Таку можливість забезпечую спеціальний компонент класу – деструктор (знищувач об’єктів) класу. Для нього передбачений стандартний формат:
~ім’я_класу () {оператори тіла деструктора};
Назва деструктору в С++ завжди починається з символа тильда «~», за яким без пропусків та інших роздільних знаків поміщується ім’я класу. У деструктора не може бути параметрів (навіть типу void). Деструктор не має повертає мого значення (навіть типу void). Виклик деструктора виконується неявно, автоматично, як тільки об’єкт класу знищується. [3]
1.4. Особливості розробки класів мовою С++
У відповідності до синтаксису мови С++ кожний компонент класу має статус доступу. Таких статуси три: загальнодоступний (public), власний (private) та захищений (protected).За специфікаторами доступу (public, private, protected) йде двокрапка. Дія специфікаторів на компоненти класу починається з моменту написання до нового специфікатора або до кінця описання класу.
Специфікатор доступу privateвикористовується для завдання статусу доступу до елементів даних класу, що дозволяє вирішити проблему захисту даних. Власні дані становляться доступними тільки для методів свого класу. Специфікатор доступу public часто використовується для завдання загальнодоступного доступу методів класу, які організують зв’язок об’єкта даного класу з зовнішнім світом. Статус захищений (protected)використовується в класах при використанні механізму успадкування класів. При відсутності успадкування специфікатор protected еквівалентний специфікатору private.
Усі компоненти класу, введені за допомогою ключових слів struct і union є за замовченням загально ступними, а за допомогою ключового слова class – власними, тобто недоступними для зовнішніх викликів. Для заміни статусу доступу компонентів класу, описаних за допомогою ключових слів classта union, необхідно використовувати специфікатори доступу. Класи, описані за допомогою ключового слова union, не можуть використовуватися як базові класи при успадкуванні. У об’єктів, об’явлених на основі подібного класу, для елементів даних виділяється загальне місце в пам’яті. Статус компонентів у таких класів змінити неможна. [2]
Одним з найважливіших механізмів в С++ є механізм успадкування. Успадкування в будь-якій сучасній мові програмування виконує дві ролі: з одного боку, попереджає дублювання кодів, а з іншого – допомагає розвивати роботу в необхідному направленні. При успадкуванні обов’язково є клас-родитель та клас-нащадок. В С++ клас-родитель прийнято називати базовим, а клас-нащадок – похідним. Відносини між родительським класом та його нащадками називають ієрархією класів.
Простим (або одиночним) називається успадкування, при якому похідний клас має тільки одного родителя. Формально успадкування одного класу от іншого можна завдати наступною конструкцією:
Classім’я_класу-нащадника: [модифікатор_доступу]ім’я_базового_класу
{тіло_класу}
Клас-нащадок успадковує структуру (всі елементи даних) та поведінку (всі функції-методи) базового класу. Модифікатор_доступу визначає доступність елементів базового класу в класі-нащадку. Квадратні дужки говорять о том, що цей модифікатор може бути відсутнім. Цей модифікатор називається модифікатором успадкування.
Існують чотири варіанти успадкування: клас від класу, клас від структури, структура від структури та структура від класу. В залежності від модифікаторів доступу при об’яві базового класу та при успадкуванні, доступність об’єктів базового класу із класів-нащадків змінюється.
В Таблиці 1 приведені усі варіанти доступності елементів базового класу в похідному класі.
Модифікатор в базовому класі | Модифікатор успадкування | Доступ в похідному класі | |
struct | class | ||
public | відсутній | public | private |
protected | відсутній | public | private |
private | відсутній | недоступний | недоступний |
public | public | public | public |
protected | public | protected | protected |
private | public | недоступний | недоступний |
public | protected | protected | protected |
protected | protected | protected | protected |
private | protected | недоступний | недоступний |
public | private | private | private |
protected | private | private | private |
private | private | недоступний | недоступний |
Таблиця 1. Доступ до елементів базового класу в класах-нащадках.
Якщо у якості специфікатора доступу записано слово public, то таке успадкування називається відкритим. Відповідно, при використанні модифікатора protected маємо захищене успадкування, а слово private визначає закрите успадкування.
Також мова С++ підтримує механізм множинного успадкування. Тобто, один клас-нащадок може мати два та більше класів-родителів. Такий клас-нащадок буде успадковувати дані та методи з усіх класів-родителів відповідно до статусу доступу в класів-родителів. Множинне успадкування можна задати такою конструкцією:
Class ім’я_класу-нащадника: [модифікатор_доступу1] ім’я_базового_класу1,
[модифікатор_доступу2]ім’я_базового_класу2,
...
[модифікатор_доступуN]ім’я_базового_класуN
{тіло_класу}
[4]
Мові С++ включає тау властивість, як поліморфізм – можливість для об’єктів різних класів, зв’язаних з допомогою успадкування, реагувати різними способами при виклику однієї функції-елементу. До найважливіших форм поліморфізму можна віднести:
· перевантаження функцій та операцій;