Professional Documents
Culture Documents
зошит1 для лаб ООП1 2022
зошит1 для лаб ООП1 2022
Зошит
V семестр
________________________________________
2022
1
Лабораторна робота № 1
Тема:Створення класу. Доступ до елементів класу
Мета:Навчитися створювати та використовувати класи
Завдання
1.Створити клас, призначений для обчислення значення арифметичного виразу
sin2 ( x+ y )
a= 4
−ln ( x 2 z )
√ z cos x при заданих значеннях аргументів:
x=x + y ,
y=
y
z √5
, z= cos
x+ y
3
2.В класі визначити приховане поле а і методи доступу до цього поля, створити два
об’єкти.
3.Створити ще один клас Group з двома прихованими полями: k-кількість учнів,
name – назва групи. Створити 1 метод, який буде зчитувати значення з
клавіатури, 1 метод для ініціалізації даних і 1 метод, який буде виводити всю
інформацію.
Лістинг 1.1
2
3
Висновок: _______________________________________________________________
Лабораторна робота № 2
Тема: Створення конструкторів
Мета: Навчитись створювати та використовувати конструктори
Лістинг 2.1
#include <iostream>
5
2.Створити клас MyDate, що визначає дату (число, місяць, рік). У класі оголосити
конструктор, що отримує три параметри, які встановлюють нову дату.
Лістинг 2.2
#include <iostream>
6
7
Висновок: ____________________________________________________________
Лабораторна робота № 3
Тема: Перевантаження конструкторів
Мета: Навчитись перевантажувати конструктори
Завдання
1. В класі Student (прізвище, курс, середній бал) створити конструктор без
параметрів і деструктор. Перевантажити конструктор.
Лістинг 3.1
#include <iostream>
8
2. Створити клас ПРАЦІВНИК з закритими змінними, що зберігають такі дані:
прізвище, професія, заробітна плата, премія, ставка. Визначити конструктор за
замовчуванням та з параметрами для ініціалізації об’єктів класу (конструктор не
повинен ініціалізувати значення ставки, натомість він має викликати функцію,
яка її визначає), деструктор.
3. Додати у клас функцію призначення премій. Врахувати, що премія визначається
за принципом: якщо заробітна плата менша за середню зарплату усіх
співробітників, то розмір премії становить 50% від заробітної плати, в інших
випадках – 30%.
4. Додати у клас функцію визначення заробітної плати.
5. Додати функцію виведення даних про співробітника.
9
Лістинг 3.2
#include <iostream>
10
Висновок: ____________________________________________________________
Лабораторна робота № 4
Тема: Використання вбудованих функцій
Мета: Навчитись створювати та використовувати inline-функції
Завдання
Лістинг 4.1
12
13
Висновок: ____________________________________________________________
Лабораторна робота № 5
Тема: Створення масивів об’єктів
Мета: Навчитися створювати та використовувати масиви об’єктів
Завдання
1. Cтворити масив об’єктів. Кожний об’єкт повинен містити інформацію про
1.
іграшки: назва іграшки, ціна і вікові границі для дітей (наприклад, для дітей від 2
до 5 років). Вивести назви іграшок для дітей вказаного віку.
Лістинг 5.1
14
1. Cтворити масив об’єктів. Кожний об’єкт повинен містити інформацію про
2.
студента: прізвище, група, рік вступу, рік народження. Вивести список студентів
вказаного року народження.
Лістинг 5.2
15
Висновок: ____________________________________________________________
Лабораторна робота № 6
Тема: Створення статичних членів класу
Мета: Навчитися створювати статичні змінні
16
Короткі теоретичні відомості
Члени класу (як функції, так і змінні) можуть бути статичними. Оголошення
статичного члена здійснюється в тілі класу за допомогою зарезервованого слова
static в межах класу, а визначення (опис) – за його межами.
class myClass
{ …
static int x;
…
};
int myClass::x;
Завдання
1. Створити клас TOVAR, який містить наступні поля:
name – назва товару;
cost1 – ціна закупки товару;
cost2 - ціна продажу товару.
count –кількість одиниць товару;
profit – прибуток.
та статичну змінну number для порядкованого номеру кожного товару.
Написати програму, що використовує даний клас і виконує наступні дії:
- вводить з клавіатури масив даних SHOP, що складається з N змінних типу
TOVAR і обчислює прибуток по кожному товару;
- Виводить на екран товари, які мають найбільший і найменший прибуток.
- Виводить інформацію про кожний товар (назва, порядковий номер та прибуток).
Лістинг 6.1
17
,
18
Висновок: ____________________________________________________________
Лабораторна робота № 7
Тема: Використання дружніх функцій та класів
Мета: Навчитись використовувати дружні функції та класи
Короткі теоретичні відомості
19
Технологія об'єктно-орієнтованого програмування дає змогу організувати
доступ до закритих членів класу функціями, які не є його членами. Для цього
достатньо оголосити ці функції дружніми до цього класу. Щоб зробити
функцію “другом” класу, потрібно помістити її прототип в public-розділ
оголошення класу і попередити його ключовим словом friend. Наприклад,
наведений нижче фрагмент коду функції Fun() оголошується "другом" класу
myClass:
class myClass // Оголошення класового типу
{ //...
public:
friend void Fun(myClass obj); // "Дружня" функція класу
//...
};
Завдання
1. Створити два класи. В першому класі створи дві закриті змінні a, b. В
другому масив цілих чисел.
2. Створити дружню функцію Sum для обчислення кількості дадатніх
елементів масиву, яка не є членом жодного класу.
3. Створити функцію S_а, яка є членом другого класу і одночасно «дружня»
для першого для обчислення максимального із двох значень (a, b).
Лістинг 7.1
#include <iostream>
20
4. Створити два клас: матриця і вектор. У кожному класі визначити
конструктори та деструктори. Як закриті елементи класів створити масиви, що
зберігають відповідно матрицю (двовимірний масив) або вектор (одновимірний
масив) та їх розмірність.
5. Створити функцію для множення вектора на матрицю.
21
Лістинг 7.2
#include <iostream>
22
Висновок: ____________________________________________________________
Лабораторна робота № 8
Тема: Передача об'єктів функціям. Повернення об’єктів
Мета: Навчитися працювати з об’єктами у функціях
Короткі теоретичні відомості
23
Об'єкти можна передавати функціям, як звичайні змінні. Для цього
застосовується звичайний механізм передачі параметрів по значенню. Не
дивлячись на зовнішню простоту, цей процес може привести до несподіваних
наслідків, що стосуються конструкторів і деструкцій.
Якщо виникає необхідність створити копію об'єкту і передати її функції,
звичайний конструктор не викликається. Замість нього викликається
автоматичний конструктор копіювання, що створює побітовий дублікат об'єкту.
Проте при знищенні копії об'єкту (як правило, у момент повернення з функції)
викликається його деструктор.
При поверненні з функції автоматично створюється тимчасовий об'єкт, в
якому зберігається значення, що повертається. Саме цей об'єкт насправді
повертається в зухвалий модуль. Після повернення цей об'єкт знищується. Це
може привести до непередбачуваних наслідків. Наприклад, якщо деструкція
об'єкту, що повертається, повинна звільняти динамічну пам'ять, вона
звільнятиметься, навіть якщо об'єкт, якому привласнюється значення, що
повертається, як і раніше посилається на неї. Уникнути цього можна за
допомогою перевантаження оператора присвоєння і визначення конструктора
копіювання.
Завдання
1. В класі Автомобіль створити декілька варіантів конструктора (звичайний
конструктор і конструктор копії). Створити лічильник автомобілів.
2. Створити 2 автомобілі. Присвоїти одному автомобілю копію іншого. Вивести
інформацію про автомобілі, їх кількість.
3. Продемонструвати механізм передачі об’єктів функціям і повернення
об’єктів функціями (наприклад, передати чи повернути швидкість
автомобіля).
Лістинг 8.1
24
25
Висновок:
_________________________________________________________________
Лабораторна робота № 9
Тема: Перевантаження бінарних операторів “+” і “=”
Мета: Навчитися перевантажувати оператори
Завдання
1. Створити два клас: матриця і вектор. У кожному класі визначити
конструктори та деструктори. Як закриті елементи класів створити масиви,
що зберігають відповідно матрицю (двовимірний масив) або вектор
(одновимірний масив) та їх розмірність.
2. Створити дружні функції множення вектора на матрицю і навпаки.
3. Перевантажити оператори “+” для додавання двох матриць.
4. Перевантажити оператори “*” для множення матриці на число та навпаки.
5. Перевантажити оператори “*” для множення двох векторів, множення
вектора на число та навпаки.
6. Перевантажити оператор “=”.
7. В головній функції продемонструвати роботу перевантажених функцій.
Лістинг 9.1
27
28
Висновок:
____________________________________________________________
Лабораторна робота № 10
Тема: Перевантаження унарних операторів “++” і “--”
Мета: Навчитися перевантажувати унарні оператори
Завдання
29
1. Створити клас Автомобіль, у якому визначити приховані поля швидкість,
пробіг. Визначити методи доступу до цих полів.
2. Перевантажити оператори ++, -- які будуть збільшувати/зменшувати
швидкість на 1.
3. Перевантажити оператори +=, -= які будуть збільшувати/зменшувати пробіг
автомобіля.
4. У програмі з попередньої лабораторної роботи перевантажити оператор “-”
(унарний мінус) для матриці і для вектора.
Лістинг 10.1
30
Висновок:
____________________________________________________________
Лабораторна робота № 11
Тема: Перевантаження оператора "[]"
Мета: Навчитися перевантажувати оператор "[]"
31
класу. Ось як виглядає загальний формат операторної функції-члена класу
operator[]().
тип ім'я_класу::operator[](int індекс)
{
//...
}
Формально параметр індекс необов'язково повинен мати тип int, але
операторна функція operator[]() зазвичай використовують для забезпечення
індексації елементів масивів, тому в загальному випадку як аргумент цієї
функції передається цілочисельне значення.
Припустимо, нехай створено об'єкт ObjA, тоді вираз ObjA[3]
перетвориться в такий виклик операторної функції operator[]():
ObjA.operator[](3);
Іншими словами, значення виразу, що задається в операторі індексації
елементів масиву "[]", передається операторній функції operator[]() як
безпосередньо заданий аргумент. При цьому показник this вказуватиме на
об'єкт ObjA, тобто об'єкт, який здійснює виклик цієї функції.
Завдання
1. Створити клас Студент, який містить приховані поля: прізвище студента,
масив предметів і масив оцінок з відповідних предметів, середній бал.
Визначити методи для введення даних, обчислення середнього балу та
виведення всієї інформації на екран.
2. Перевантажити оператор [] такий чином, щоб можна було отримувати та
змінювати значення відповідного елементу прихованого масиву.
3. Забезпечте контроль за індексом масиву, значення якого вийшло за
дозволені межі.
Лістинг 11.1
32
Висновок:
____________________________________________________________
33
Лабораторна робота № 12
Тема: Перевантаження оператора "()" та операторів
відношення
Мета: Навчитися перевантажувати оператор "()" та операторів
відношення
Короткі теоретичні відомості
Можливо, найбільш інтригуючим оператором, якого можна
перевантажувати, є оператор виклику функції "()". Під час його
перевантаження створюється не новий спосіб виклику функцій, а
операторна функція, якій можна передати довільну кількість параметрів.
Почнемо з такого прикладу. Припустимо, що певний клас містить наведене
нижче оголошення перевантаженої операторної функції:
int operator()(float f, char *p);
І якщо у програмі створюється об'єкт obj цього класу, то настанова
obj(99.57, "перевантаження");
перетвориться в такий виклик операторної функції operator():
operator()(99.57, "перевантаження");
У загальному випадку при перевантаженні оператора виклику функцій
"()" визначаються параметри, які необхідно передати функції operator().
Під час використання оператора "()" у програмі задані аргументи
копіюються в ці параметри.
Як завжди, об'єкт, який здійснює виклик операторної функції (obj у
наведеному прикладі), адресується показником this.
Завдання
1. Створити клас Автомобіль, який містить приховані поля – Швидкість,
Пробіг, Вартість. Визначити методи доступу до цих полів.
2. Перевантажити оператор () з трьома параметрами: Швидкість, Пробіг,
Вартість, який збільшуватиме швидкість на 20, пробіг на 10, а вартість
зменшуватиме на 1.
3. Перевантажити оператор () з одним параметром - цілим числом, який
перемножуватиме Швидкість, Пробіг, Вартість на задане число.
Лістинг 12.1
34
35
Висновок:
____________________________________________________________
Лабораторна робота № 13
Тема: Перевантаження операторів new і delete
Мета: Навчитися перевантажувати оператори new і delete
Завдання
36
1. Створити клас Мобільний телефон (Модель, Діагональ екрану).
2. Перевантажити оператори new і delete таким чином, щоб на екран
виводилися відповідні повідомлення.
3. Створити вказівник на Мобільний телефон. Виділити для нього пам’ять.
Змінити параметри телефону. Знищити виділену пам’ять.
Лістинг 13.1
37
Висновок:
____________________________________________________________
Лабораторна робота № 14
Тема: Використання наслідування
Мета: Навчитися використовувати наслідування
Завдання
Лістинг 14.1
#include <iostream>
39
4. Створити базовий клас Фігура (закриті поля: назва, кількість сторін,
площа, периметр). Створіть похідні класи Трикутник і Прямокутник, в яких
оголосіть поля для довжин сторін. Обчисліть площу і периметр фігур за
40
їхніми довжинами сторін. Виведіть всю інформацію про фігури (назву,
кількість сторін, довжини сторін, площа, периметр)
Лістинг 14.2
#include <iostream>
41
Висновок:
_______________________________________________________________
42