ate, що позначають, відповідно, відкриті члени класу, члени класу, доступні тільки з класів-нащадків і приховані, доступні тільки усередині класу. Конкретна номенклатура модифікаторів і їх точний зміст різняться в різних мовах.
Методи доступу
Поля класу, в загальному випадку, не повинні бути доступні ззовні, оскільки такий доступ дозволив би довільним чином змінювати внутрішній стан об'єктів. Тому поля зазвичай оголошуються прихованими (або мова в принципі не дозволяє звертатися до полів класу ззовні), а для доступу до знаходяться в полях даними використовуються спеціальні методи, звані методами доступу. Такі методи або повертають значення того чи іншого поля, або виробляють запис в це поле нового значення. При записи метод доступу може проконтролювати допустимість записуваного значення і, при необхідності, провести інші маніпуляції з даними об'єкта, щоб вони залишилися коректними (внутрішньо узгодженими). Методи доступу називають ще аксессор (від англ. Access - доступ), а окремо - Геттера (англ. Get - читання) і сетерами (англ. Set - запис).
Поліморфізм реалізується шляхом введення в мову правил, згідно з якими змінної типу «клас» може бути присвоєний об'єкт будь-якого класу-нащадка її класу.
Постановка завдання
Побудувати систему класів для опису плоских геометричних фігур: коло, квадрат, прямокутник. Передбачити методи для створення об'єктів, переміщення на площині, зміни розмірів і обертання на заданий кут; обчислення площі і периметра фігур. Визначити метод, який відшукує коло найменшого радіуса, що містить всі задані фігури.
Теоретичний матеріал по завданню
Система об'єктів.
Для опису системи об'єктів нам знадобиться поняття абстрактного класу.
Абстрактний клас в об'єктно-орієнтованому програмуванні - базовий клас, що не припускає створення примірників. Абстрактні класи реалізують на практиці один з принципів ООП - поліморфізм. Абстрактний клас може містити (і не містити) абстрактні методи і властивості. Абстрактний метод не реалізується для класу, в якому оголошено, однак повинен бути реалізований для його неабстрактне нащадків. Абстрактні класи являють собою найбільш загальні абстракції, тобто мають найбільший обсяг і найменше зміст.
На мові програмування C ++ абстрактний клас оголошується включенням хоча б однієї чистої віртуальної функції, типу virtual _сігнатура_функціі_=0 ;, яка, як і інші, може бути замінена.
Контейнер vector
Для найбільш зручного і безпечного зберігання об'єктів можна використовувати контейнер vector.
Шаблон vector розташований в заголовному файлі lt; vector gt ;. Як і всі стандартні компоненти, він розташований в просторі назв std. Даний інтерфейс емулює роботу стандартного масиву C (наприклад, швидкий довільний доступ до елементів), а також деякі додаткові можливості, начебто автоматичного зміни розміру вектора при вставці або видаленні елементів.
Всі елементи вектора повинні належати одному типу. Наприклад, не можна спільно зберігати дані типів char і int в одному примірнику вектора. Клас vector володіє стандартним набором методів для доступу до елементів, додавання і видалення елементів, а також отримання кількості збережених елементів.
Ініціалізація:
vector lt; int gt; myVector;
Доступ до елементів здійснюється так само, як і для звичайного масиву: myVector [i]=4;
Кількість елементів повертає функція size (), а очищення здійснюється функцією clear ().
Площі і периметри геометричних фігур.
Площа квадрата: S=a2. Периметр: P=a * 4.
Площа прямокутника: S=a * b. Периметр: P=(a + b) * 2.
Площа круга: S=r2. Периметр: P=2r.
Поворот вектора на кут щодо точки.
Для того, щоб повернути вектор на кут щодо якої-небудь точки, використовуються наступні формули:
=x0 + (x1-x0) * cos (alpha) - (y1-y0) * sin (alpha) y=y0 + (x1-x0) * sin (alpha) + (y1-y0) * cos ( alpha)
Реалізовані алгоритми
Система класів
Для реалізації системи класів створимо абстрактний клас Shape (форма), наповнивши його віртуальними функціями Move, Resize, Rotate, FindSquare, FindPerimeter.
успадкуємо від Shape класи Circle і Rectangle - коло і прямокутник. У цих класах реалізуємо всі віртуальні функції відповідно до особливостей кожної геометричної фігури. Потім успадкуємо від Rectangle клас Quadrate - квадрат і перевизначити в ньому всі функції відповідно до його геометричними особливостями. Зручністю даної системи буде можливість звертатися до більшості полів класів Quadrate і Rectangle, приводячи їх до загального типу Rectangle.
Зберігання фігур
Для зберігання фігур створюється контейнер vector з типом Shape. При зверненні до об'єкта, аналізується значення його змінної type (тип), і об'єкт наводиться до конкретного нащадку класу Shape.
...