
- •З курсу “Об’єктно- орієнтоване програмування”
- •Методичні вказівки до лабораторних робіт з курсу “Об’єктно-орієнтоване програмування”
- •Вступ 5 Правила техніки безпеки при виконанні лабораторних робіт 6
- •Правила техніки безпеки при виконанні лабораторних робіт
- •Лабораторна робота №1
- •Короткі теоретичні відомості
- •Мета роботи: реалізувати декілька класів та здійснити їх композицію Короткі теоретичні відомості
- •Оформлення звіту:
- •Контрольні питання
- •Список рекомендованої літератури
- •Лабораторна робота № 3
- •Короткі теоретичні відомості
- •Лістинг 2.4. Конструктори і параметри
- •Порядок виконання роботи
- •Оформлення звіту:
- •Список рекомендованої літератури
- •Лабораторна робота № 4
- •Короткі теоретичні відомості
- •Оформлення звіту:
- •Контрольні питання
- •Список рекомендованої літератури
- •Лабораторна робота № 5
- •Порядок виконання роботи
- •Контрольні питання
- •Список рекомендованої літератури
Лістинг 2.4. Конструктори і параметри
Конструктор копіювання викликається для створення прихованої «внутрішньої» копії об'єкту. При передачі як параметр виразу може викликатися конструктор ініціалізації.
f1(120) // по значенню викликається конструктор ініціалізації
f3(120)// по константному посиланню - викликається конструктор ініціалізації
Конструктори дозволяють більш природним чином задавати значення параметрів за замовчуванням.
Void f1(Money t = 100);
Void f3(const Мопеу &t = 200);
Void f2 (Money = new Money);
Void f2(Money y = new Money (300));
Виклик функцій без аргументу у всіх випадках супроводжується викликом конструктора ініціалізації.
Константи в класі
У класі дозволяється визначати цілочисельні константи; до цілочисельних типів відносяться int і long в знаковому і беззнаковому вигляді Bool, а також тип еnum, що перераховує. Константу в класі можна визначити одним з двох способів:
як тип enum, що перераховує;
як статичну константу цілочисельного типу.
class Constant { public:
enum Week { mon = 1. tue, wed, thu, fri, sat, sun = 0 };
static const. int с1 = 1;
static const. char с2 =’ х1’:
static const. Day сЗ = sun; }:
Звернення до констант, що перераховують, здійснюється або по імені об'єкту, або по імені класу:
cout « Соnstant::sat « endl;// кваліфікатор-клас
Constant dd;
cout « dd.sat « endl;// кваліфікатор-об’єкт
Звернення до статичних констант зазвичай робиться по імені класу:
cout « Constant: ::с1« endl;// виводить 1
cout « Constant : :с2 « endl;// виводить x
cout « Constant : :сЗ « endl;// виводить 0
Константи інших типів оголошуються як константні поля (без явної ініціалізації), і їх повинен ініціалізувати конструктор в списку ініціалізації конструктора. Список ініціалізації задається відразу після списку параметрів; на початку списку ставиться двокрапка, що відокремлює його від параметрів; ініціалізації полів пишуться через кому. Константними можуть бути і цілочисельні поля.
class Constant
{ const long с1:// цілочисельне константне поле
const double с2; // нецілочисельне константне поле
public
Constants ( const double &r = 0)
:c2(r,) c1(l) {}; // список ініціалізації
};// тіло конструктора
Одну ініціалізацію є ім'я поля-константи, услід за яким в дужках вказується вираз, що ініціалізував. При завданні списку ініціалізації треба пам'ятати про декілька правил.
Ініціалізувати в списку ініціалізації можна і константні поля, і звичайні поля-змінні.
Незалежно від порядку перерахування полів в списку ініціалізації, поля отримують значення в порядку оголошення в класі.
Як ініціалізуючий вираз, можна задавати будь-який обчислюваний вираз (не обов'язково константне), результатом якого є значення того ж (або що приводиться) типу, що і тип ініціалізованого поля; для полів типу клас виконується виклик конструктора.
Для ініціалізації поля вбудованого типу нулем використовується спеціальна форма ініціалізації ім’я_поля() — вираз не задається; для поля-об'єкту деякого класу викликається конструктор без аргументів (за замовчуванням).
На місці виразу, що ініціалізував, в дужках можна задавати список виразів через кому; останній вираз повинен мати тип або приводитися до типу поля.
Список ініціалізації виконується до початку виконання тіла конструктора
Завдання
У всіх завданнях вимагається реалізувати по два-три класи. Один клас є основним, решта – допоміжними. Допоміжні класи мають бути визначені як незалежні. Об’єкти допоміжних класів повинні використовуватися в якості полів основного класу.
Реалізувати клас Account (завдання 12), використовуючи для представлення суми клас Money із завдання 4.
Реалізувати клас Account (завдання 12), використовуючи для представлення суми клас Money з завдання 13.
Реалізувати класAccount (завдання 12). Додати поле – дату відкриття рахунку, використовуючи клас Date з завдання 9. Додати метод, який вираховує кількість днів з моменту відкриття рахунку та додає по 0.01% до проценту начислення за кожний день.
Реалізувати клас Calculator з повним набором арифметичних операцій використовуючи клас Fraction з завдання 15.
Реалізувати клас Bankomat (завдання 14), використовуючи для представлення суми клас Money з завдання 13.
Реалізувати клас Fraction (завдання 15), використовуючи для представлення цілої частини клас LongLong з завдання 18, а для представлення дробової частини додатне дробове число типу double.
Реалізувати клас Calculator з повним набором арифметичних операцій на основі класу Fraction з попереднього завдання.
Реалізувати клас Triangle (завдання 5) використовуючи клас Angle з завдання 6 для представлення кутів.
Реалізувати клас Goods (завдання 16), додавши поле – дату поступлення товарів на склад (використовуючи клас Date). Реалізувати метод вираховуючий термін придатності товару.
Реалізувати клас Goods (завдання 16),використовуючи для представлення ціни клас Money з завдання 14. Реалізувати метод знецінення товару, знижуючи ціну на 1% за кожний день прострочення терміну придатності.
Реалізувати клас Triangle (завдання 15) з полями координатами вершин. Для представлення координат вершин використовуйте клас Point з завдання 7.
Реалізувати клас Payment (завдання 19) використовуючи поля року та дати з класу Date з завдання 19. Стаж варто вираховувати використовуючи методи класу Date.
Реалізувати клас Money (завдання 14), використовуючи клас Fraction із завдання 15.
Реалізувати клас ModelWindow (завдання 3), додавши поле для курсору. Використовуйте для представлення поля курсору клас Cursor із завдання 18.
Реалізувати клас Bill, що є разовим платежем за телефонну розмову. Клас має включати поля: прізвище платника, номер телефону, тариф за хвилину розмови, знижка (у відсотках), час початку розмови, час завершення розмови, сума до оплати. Для представлення часу використовуйте клас Time із завдання 10. Реалізувати методи вилучення і зміни полів. Час розмови, що підлягає оплаті, визначається в хвилинах; неповна хвилина вважається за повну. Метод toString() має видавати суму в гривнях.
Реалізувати клас Set (множина) не більше ніж із 64 елементів цілих чисел, використовуючи клас BitString із завдання 17. Множина має забезпечувати включення елементу в множину, виключення елемента з множини, об’єднання, перетин і відмінність множин, визначення кількості елементів в множні.
Реалізувати клас Rational (завдання 8), використовуючи для представлення чисельника і знаменника клас LongLong із завдання 18.
Реалізувати клас Money (завдання 4), використовуючи для представлення гривень клас LongLong із завдання 18.
Реалізувати клас Cursor (завдання 20), використовуючи для представлення координат клас LongLong із завдання 18.