Лекція "Класи мовою С++ та об’єкти"

Про матеріал
Тема 2. Класи мовою С++ та об’єкти Зміст теми. Оголошення класу. Заголовок та реалізація. Доступ до членів класу. Створення екземплярів класу (об’єктів). Виклик функцій класу.
Перегляд файлу

Тема 2. Класи мовою С++ та об’єкти

Зміст теми. Оголошення класу. Заголовок та реалізація. Доступ до членів класу. Створення екземплярів класу (об’єктів). Виклик функцій класу.

 

 

Визначення або оголошення класу починається з ключового слова class. Далі у фігурних дужках ({}) описується тіло класу. Визначення класу закінчується крапкою з комою. Тіло класу включає дані (члени-дані), функції (члени-функції) і специфікатори доступу до членів класу. Специфікатори доступу до членів класу завжди закінчуються двокрапкою (:) і можуть з'являтися у визначенні класу багато разів і у будь-якому порядку.

Визначення (оголошення) класу записується таким чином:

class <ім’я класу>

{

[специфікатор доступу:]

 <тип атрибуту 1> < ім’я атрибуту 1 >;

 <тип атрибуту 2> < ім’я атрибуту 2>;

 ...

 [специфікатор доступу:]

 <тип функції 1> < ім’я функції 1>;

 <тип функції 2> < ім’я функції 2>;

 ....

};

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

Хорошим стилем програмування вважається винесення оголошення класу, або інтерфейсу, у файл заголовка, який зазвичай має розширення «.h». Виконання класу, тобто визначення функцій-членів, записується у файл з розширенням «.cpp», який називається реалізацією.

Як було вказано вище, при описі класу можна використовувати специфікатори доступу до членів класу. Специфікатори доступу – це спеціальні синтаксичні конструкції, що явно задають область видимості кожного члена класу. Існують наступні специфікатори доступу:

public – відкритий доступ;

private – закритий доступ;

protected –  захищений доступ.

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

За замовчанням доступ до членів класу – private. Доступ до відкритих членів класу мають будь-які функції в програмі, доступ до закритих членів класу мають тільки члени-функції даного класу і друзі класу. Дані-члени класу зазвичай робляться закритими, а функції-члени – відкритими. Глибокий сенс такого підходу полягає в тому, що дійсне представлення даних усередині класу не торкається клієнтів (користувачів) класу. Клієнти класу використовують клас, не знаючи внутрішніх деталей його реалізації. Якщо реалізація класу змінюється, інтерфейс класу залишається незмінним і дійсний код клієнта класу не вимагає змін. Це значно спрощує модифікацію систем.

З того, що дані класу закриті, не витікає, що клієнти не можуть змінювати ці дані. Дані можуть бути змінені функціями-членами або друзями цього класу. Наприклад, щоб дозволити клієнтам класу прочитати закрите значення даних, клас може мати функцію «одержати» (get). Щоб дати клієнтам можливість змінювати закриті дані, клас може мати функцію «встановити» (set). Таким чином, доступ до закритих членів класу здійснюється через відкриті члени-функції даного класу.

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

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

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

Зобразимо клас на мові UML наступним чином:


 

CTovar

 

name

price

 

input()

output()

 

Рисунок 1Зображення класу Товар на UML

 

Оголосимо клас CTovar:

   class CTovar  // CTovar-   ім'я класу

   {

//оголошення членів-даних класу

       char name[15];    // найменування товару

       float price;       // ціна товару

     public:   // специфікатор доступу (відкритий)

//оголошення членів-функцій класу (методів)

       void input();  //функція уведення з клавіатури даних про товар

       void output();   //функція виводу на екран даних про товар

   };

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

Приклад опису функції input() поза класом наведений нижче:

void  CTovar::input() //оголошення функції input() класу CTovar

   {    // початок функції

     cout <<"Уведіть найменування товару "; 

     cin >>name;

     cout <<"Уведіть ціну товару ";

     cin >>price;

   }    // кінець функції

 

Оголошення екземпляра класу або об'єкта з ім’ям Tovar наведено нижче:

CTovar Tovar;

Наприклад, виклик функції output() у функції main() запишеться в такий спосіб:

Tovar.output(); 

 

Запитання для самоконтролю

 

  1. Дайте визначення класу та об’єкту у програмуванні.
  2. Що може містити оголошення класу?
  3. Як оголосити клас на мові С++? 
  4. Де може бути визначена (описана) функція класу?
  5. Порівняйте виклик члена-функції класу у функціях класу та поза функціями цього класу.
  6. Назвіть специфікатори доступу до членів класу.
  7. Чи може з'являтися у визначенні класу один і той же специфікатор доступу багато разів?
  8. У якому порядку можуть з'являтися специфікатори доступу до членів класу?
  9. Який рівень доступу за замовчуванням для члена-класу?
  10. Які функції в програмі мають доступ до відкритих членів класу?
  11. Які функції в програмі мають доступ до закритих членів класу?

Як здійснюється доступ

docx
Додано
14 квітня 2020
Переглядів
917
Оцінка розробки
Відгуки відсутні
Безкоштовний сертифікат
про публікацію авторської розробки
Щоб отримати, додайте розробку

Додати розробку