
- •Концепція об’єктно-орієнтованого програмування
- •Класи та об’екти
- •Анатомія класу
- •Рівні доступу до членів класу
- •Методи класу всередині визначення класу
- •Визначення об’єктів
- •Виклик методів класу
- •Конструктори
- •Списки ініціалізаторів
- •Деструктори
- •Члени-дані
- •Функції-члени
- •Принцип успадкування
- •If (умова_істинна)
- •3. Цикл do while (з післяумовою)
Методи класу всередині визначення класу
Зверніть увагу, що функції setdata() та showdata() визначені всередині класу, т. б. код функції міститься безпосередньо у визначенні класу. Методи класу, визначені подібним чином, за замовчуванням є вбудованими. Проте, функції всередині класу можна лише оголошувати, а визначення функції проводити в іншому місті.
Визначення об’єктів
Зверніть увагу на те, що при визначенні класу не створюються ніякі його об’єкти. Визначення класу лише задає вигляд майбутнього об’єкта. Об’єкти визначаються у функції main():
|
Object s1, s2; // визначення двох об’єктів класу Object |
Виклик методів класу
Доступ до методів класу можливий лише через конкретний об’єкт цього класу. Оператор setdata(1066) сам по собі не має значення.
Тому для того, щоб отримати доступ до методу класу, необхідно використовувати операцію крапки (.), яка пов’язує метод з ім’ям об’єкта. Операцію крапки (.) називають операцією доступу до члену класу. Наступна пара операторів здійснює виклик методу setdata():
|
s1.setdata(1066); // виклик методу setdata() об’єкта s1 s2.setdata(1776); // виклик методу setdata() об’єкта s2 |
Метод надає полю setdata об’єкта s1 значення 1066, а полю setdata об’єкта s2 значення 1776.
Аналогічно, два виклики функції showdata() відобразять на екрані значення полів відповідних об’єктів:
|
s1.showdata(); // виклик методу showdata()об’єкта s1 s2.showdata(); // виклик методу showdata()об’єкта s2 |
Результат роботи програми виглядає наступним чином: Значення поля дорівнює 1066 Значення поля дорівнює 1776
Конструктори
Класи в С++ мають спеціальну функцію, що називається конструктором.
Конструктор (constructor) – це функція, яка автоматично викликається при створенні об’єкта класу.
Конструктор використовується для ініціалізації змінних-членів класу, виділення необхідної пам’яті та виконання інших дій, необхідних перед початком використання класу. Класи, наведені в прикладах, не містять явно визначеного конструктора. В таких випадках компілятор С++Builder створює конструктор за замовчуванням (default constructor). Для простих класів це цілком допустимо, але зазвичай конструктори вставляють у класи будь-якої значущості. Ім’я конструктора повинне співпадати з ім’ям класу. Це слугує характерною ознакою конструктора. Давайте додамо оголошення конструктора в клас Avto:
|
class Avto { public: Avto(); // конструктор bool haveKey; bool Start(); void ShutDown(); protected: void StartUp(); private: void StartSystem(); bool started; int speed; }; |
Зверніть увагу, що для конструктора не вказаний тип значення, що повертається. Справа у тім, що конструктор не може повертати ніякого значення. Якщо ви спробуєте вказати тип значення, що повертається, компілятор видасть повідомлення про помилку.
Клас може мати більше одного конструктора. Це можливе завдяки перевантаженню функцій. Наприклад, можна визначити конструктор без аргументів (конструктор за замовчуванням) та конструктор з параметрами, що приймає один чи кілька аргументів для ініціалізації членів-даних.
Наприклад, клас Rect міг би мати два конструктора: конструктор за замовчуванням буде встановлювати всі члени-дані в нуль, а інший конструктор дозволить ініціалізувати члени-дані шляхом передачі конструктору аргументів. Оголошення класу Rect могло б виглядати так:
|
class Rect { public: Rect(); Rect (int _left,int _top,int _bottom,int _right); int GetWidth(); int GetHeigth(); void SetRect(int _left,int _top,int _bottom,int _right); private: int left; int top; int bottom; int right; }; |
Конструктори можна визначити наступним чином:
|
Rect::Rect() { left=0; top=0; bottom=0; right=0; } Rect::Rect(int _left, int _top, int _bottom, int _right) { left=_left; top=_top; bottom=_bottom; right=_right; } |
Перший конструктор є конструктором за замовчуванням, оскільки він не має аргументів. Його задача – просто ініціалізувати нулем всі члени-дані. Другий конструктор є конструктором з параметрами – він приймає передані йому значення й присвоює їх відповідним членам-даним. Імена змінних у списку параметрів містять знак підкреслення для того, щоб відрізнити їх від імен членів-даних.
Пам’ятайте, що не ініціалізовані змінні містять випадкові значення. Для безпеки слід надавати змінним-членам класу які-небудь початкові значення.
Важливо пам’ятати, що ви не можете явно викликати конструктор. Це відбувається при створенні, чи реалізації, об’єкта класу.
Реалізація (instantion) – це створення об’єкта, екземпляра класу.
Яким же чином використовуються різні конструктори? Це визначає реалізація об’єкта класу. Створимо два екземпляри класу Rect:
|
Rect r1; // викликається конструктор за замовчуванням Rect r2(0,0,100,100); // викликається конструктор з аргументами |