- •Об’єкто-орієнтоване
- •Методичні рекомендації та модульні завдання
- •§1. Об’єкт. Структура. Клас.
- •§2. Управління доступом до членів класу
- •§3. Перезавантаження функцій
- •§4. Шаблони функцій
- •§5. Конструктори
- •§6. Статичні члени класу
- •§7. Деструктори
- •§8. Перезавантаження операцій
- •§9. Друзі класу
- •§10. Бінарні й унарні операції
- •§11. Створення класів з підкласами. Агрегація
- •Файл реалізації “Stack.Cpp”
- •§12. Успадкування
- •§13. Ієрархія успадкування класів
- •Модуль 1 (20 балів)
- •Лабораторна робота №1 (6 балів)
- •Тема: Структури. Зовнішні функції і функції-члени структури.
- •Завдання
- •Варіанти завдань
- •Лабораторна робота №2 (6 балів) Тема: Перезавантаження операцій і функцій Завдання
- •Варіанти завдань
- •Лабораторна робота №3 (8 балів) Тема: Структури та класи Завдання
- •Варіанти завдань
- •Варіанти завдань
- •Визначити функції:
- •Визначити функції:
- •Визначити функції:
- •Визначити функції:
- •Визначити функції:
- •Варіанти завдань
- •Лабораторна робота №6 (8 балів) Тема: Абстрактні класи Завдання
- •Варіанти завдань
- •Модуль контроль (15 балів) Теоретичні питання
- •Теоретичні питання
- •Модуль контроль підсумковий (30 балів)
- •Тематика задач
- •Теоретичні питання
- •Розподіл балів і годин
- •Список літератури
- •Навчальне видання
- •Методичні рекомендації та модульні завдання
- •58012, Чернівці, вул. Коцюбинського, 2
§2. Управління доступом до членів класу
Утворені класи можна використовувати далі для розробки складних програм та для створення нових класів з існуючих (наслідування). Тому питання доступу до членів класу має суттєве значення.
Кожне оголошення усередині класу визначає привілей доступу до імен класу в залежності від того, у якій секції ім'я з'являється. Кожна секція починається з одного з ключових слів: private, protected і public.
Конструкція вигляду
class className{
private:
<приватні члени-дані>
<приватні конструктори
<приватні члени-функції>
protected:
<захищені члени-дані>
<захищені конструктори>
<захищені члени-функції>
public:
<загальнодоступні члени-дані>
<загальнодоступні конструктори>
<загальнодоступний деструктор>
<загальнодоступні члени-функції>
}; – називається визначенням (об’явою) класу, тому що вона визначає новий тип.
Розглянемо приклад, який наведений у попередньому параграфі, але замінимо ключове слово struct на class.
Приклад 4:
class Date{
іnt d,m,y;
public:
voіd іnіt (іnt dd,іnt mm, іnt yy);
void add_year(іnt n);
void add_month(іnt n);
void add_day(іnt n);
};
Ключове слово public вказує, що тільки функції–члени init, add_year, add_month, add_day доступні користувачу для використання. Якщо ключового слова не задано, то вважається, що воно private. В нашому випадку до змінних d,m,y мають доступ тільки функції-члени init, add_year, add_month, add_day. Звідси можна зробити висновок, що структура – це клас, члени якого об’явлені як public.
Таким чином, оголошення базового класу на C++ надає наступні права доступу і відповідні області видимості:
• Приватні – private імена мають найбільш обмежений доступ, дозволений тільки функціям=членам даного класу. Доступ похідних класів до приватних методів базових класів заборонений.
• Захищені – protected імена мають доступ, дозволений методам даного і похідних від нього класів.
• Загальнодоступні – public імена мають необмежений доступ, дозволений методам усіх класів і їхніх об'єктів.
Наступні правила застосовуються при утворенні різних секцій в об’яві класу:
1. Секції можуть з'являтися в будь-якому порядку, а їхні назви можуть зустрічатися повторно.
2. Якщо секція не названа, компілятор вважає наступні оголошення імен класу приватними (private). Тут виявляється відмінність оголошень класу і структури - остання розглядається за замовчуванням як загальнодоступна.
3. Якщо члени даних класу не використовуються в програмі, їх оголошують захищеними, щоб дозволити доступ тільки методам похідних класів.
Використання секцій має ряд переваг. По-перше, якщо треба змінити представлення класу, потрібно лише змінити функції–члени. Код користувача класу безпосередньо залежить тільки від відкритого інтерфейсу, і не буде потрібно його переписувати (хоча може знадобитися його перекомпіляція). По-друге, щоб навчитися використовувати клас, його потенційному користувачу буде потрібно ознайомитися тільки з прототипами функцій-членів.