f >> A або A << f – введення (читання) значення A із файлу f.
Тип елементу масиву обрати самостійно.
Варіант 6. Створити динамічний клас для роботи з рядками. Максимальна довжина послідовності – 254. Перший байт повинен містити інформацію про фактичну кількість елементів масиву. Здійснити перевантаження операцій:
" = "– присвоєння,
" + " – конкатенація (з’єднання) рядків,
" <= " – відношення "менше чи дорівнює",
" >= " – відношення "більше чи дорівнює",
" == " – відношення "дорівнює",
" != " – відношення "не дорівнює".
" <= " – відношення включення (перевіряється, чи є множина, надана лівим операндом, підмножиною множини, наданої правим),
" == " – еквівалентність множин,
" != " – нееквівалентність множин,
" << " – належність (перевіряється, чи належить значення, що надане лівим операндом, до множини, що надана правим операндом).
Варіант 7. Створити динамічний клас для роботи з рядками. Максимальна довжина послідовності – 254. Перший байт повинен містити інформацію про фактичну кількість елементів масиву. Здійснити перевантаження операцій:
" = "– присвоєння,
" << " , " >> " – консольне введення-виведення значень;
" << " , " >> " - введення із файлу і виведення у файл з символами таким чином:
f << A або A >> f – виведення (запис) значення A у файл f,
f >> A або A << f – введення (читання) значення A із файлу f.
Тип елементу масиву обрати самостійно.
Варіант 8. Створити клас для виконання точних обчислень з раціональними числами. Створити функцію скорочення раціонального числа (приведення до нормальної форми).Здійснити перевантаження символів операцій:
" = " – присвоєння,
" + " – додавання,
" – " – віднімання,
" * " – добуток,
" == " , " != " – рівність, не рівність,
" < " , " <= " , " > " , " >= " – відношення порядку.
Варіант 9. Створити клас для виконання операцій з трьохвимірними векторами. Вважати, що компоненти вектора мають дійсний тип. Конкретний тип для компонентів вектора обрати самостійно. Здійснити перевантаження символів операцій:
" + " – додавання векторів,
" – " – векторне віднімання,
" * " – скалярний добуток векторів,
" == " , " != " – рівність, не рівність,
Передбачити функцію обчислення довжини вектора.
Варіант 10. Створити клас для виконання операцій з двовимірними векторами. Вважати, що компоненти мають цілий тип. Здійснити перевантаження операцій:
“ ^ ” – розрахунок модуля вектора;
“ + ” – скалярний добуток векторів;
“ == ”, “ != ” – рівність, нерівність векторів;
“ ― ” – знайти відстань між двома векторами.
Варіант 11. Створити динамічний клас для роботи з матрицями (динамічними). Вважати, що компоненти мають цілий тип. Здійснити перевантаження символів операцій:
“ = ” – присвоєння,
“ + ” – додавання,
“ – ” – віднімання,
“ ~ ” – отримання оберненої матриці,
“ * ” – поелементне множення.
Варіант 12. Створити динамічний клас для роботи з матрицями. Вважати, що компоненти мають цілий тип. Здійснити перевантаження символів операцій:
“ = ” – присвоєння,
“ * ” – поелементне множення,
“ ~ ” – розрахунок визначника матриці,
“ ^ ” – піднесення елементів матриці до степені
Варіант 13. Перевантажити символ операції “>>” таким чином, щоб можна було робити копіювання файлу за допомогою оператору:
fa >> fb ;
де fa, fb – потоки, що пов’язані з файлами.
Операція “>>” повинна повертати значення потоку fa так, щоб можна було робити множинне копіювання:
fa >> fb >> fc;
Варіант 14. Створити динамічний клас для виконання операцій з динамічними масивами чисел дійсного типу. Зробити перевантаження символів операцій:
"=" – динамічне присвоєння,
" << " , " >> " – консольне введення-виведення значень;
" << " , " >> " - введення із файлу і виведення у файл з символами таким чином.
Передбачити можливість множинного введення-виведення.
Тип елементу масиву обрати самостійно.
.Для чого використовують перевантаження операцій?
В чому різниця між перевантаженням операцій як членів класу і friend-функцій ?
Які оператори не можна перевантажувати як friend-функції?
Які оператори не можна перевантажувати як члени класу?
В чому полягає особливість перевантаження операторів введення/виведення “<<”, “>>”?
Назвіть особливості перевантаження унарних та бінарних операторів.
Чи можливо потік передавати до функції за значенням?
Чи можливо змінювати приорітет операції?
Мета роботи – навчитись використовувати успадкування при розробці інтерфейсу програм.
Застосувавши конспект лекцій та додаткову літературу, вивчити основні принципи перевантаження.
Виконати індивідуальне завдання відповідно до номера варіанта застосувавши мову програмування С++.
Оформіти звіт.
Зробити висновки.
Варіант 1. Наданий такий клас:
class Base
{ public:
virtual void myname() { cout << "This is class Base" << endl; }
};
Від цього класу треба створити два похідних класу: DerA і DerB.
Від класів DerA і DerB шляхом множинного успадкування створити клас DerAB.
Перевизначити у кожному з створених класів функцію myname таким чином, щоб вона виводила на екран дійсне ім’я класу об’єкту, для якого вона викликається.
Для кожного з класів створеної ієрархії створити по одному об’єкту і для кожного з них викличте функцію myname.
Створіть масив із 4 покажчиків на базовий клас ієрархії. Для кожного з них створіть динамічний об’єкт, по одному для кожного з класів ієрархії. Запишіть виклик функції myname для кожного з динамічних об’єктів за допомогою покажчиків.
Поясніть дію функції mymain у всіх випадках.
Варіант 2. Створити абстрактний клас для роботи з геометричними фігурами на екрані. Передбачити такі компоненти–властивості класу: координати центра фігури; кут повороту (у градусах); масштабний фактор; і такі функції–методи: показати фігуру на екрані; зробити фігуру невидною (знищити її зображення); повернути фігуру на заданий кут (кут надається у градусах); пересунути фігуру на наданий вектор.
Застосовуючи успадкування і наведений вище абстрактний клас створити похідний клас для роботи з фігурою типу "трикутник". Визначити інтерфейсну частину у класах, застосувати атрибути доступу.
Варіант 3. Для класу «Геометрична фігура» з варіанту 2, створити похідний клас для роботи з фігурою типу «пряма». Визначити інтерфейсну частину у класах, застосувати атрибути доступу.
Варіант 4. Для класу «Геометрична фігура» з варіанту 2, створити похідний клас для роботи з фігурою типу «круг». Визначити інтерфейсну частину у класах, застосувати атрибути доступу.
Варіант 5. Для класу «Геометрична фігура» з варіанту 2, створити похідний клас для роботи з фігурою типу «прямокутник». Визначити інтерфейсну частину у класах, застосувати атрибути доступу.
Чи відрізняється уява об’єкту похідного класу у пам’яті комп’ютера від атрибутів доступу?
На що впливають атрибути доступу?
Наведіть ієрархію класів системи введення/виведення С++.
Чи можливо перевантажувати віртуальні функції?
Чи повинні співпадати прототипи віртуальних функцій?
Коли використовують абстрактні класи?
Чи можливо створювати об’єкти для абстрактних класів?
Коли використовується динамічне зв’язування та приведення типів?
Назвіть проблеми використання RTTI.
Лабораторна робота № 6 Обробка виняткових ситуацій
Мета роботи – навчитись обробляти виняткові ситуації засобами мови С++.
Порядок виконання лабораторної роботи
Застосувавши конспект лекцій та додаткову літературу, вивчити основні принципи обробки помилок (надзвичайних ситуацій).
Виконати індивідуальні завдання відповідно до номера варіанта застосувавши мову програмування С++.
Оформити звіт.
Зробити висновки.
Індивідуальне завдання
Для завдання з лабораторної роботи №6 створити клас Exception, що дозволяє обробляти наступні виняткові ситуації: помилки при відкритті файлу, помилки арифметичних операцій (ділення на 0), помилки вид динамічної пам’яті при перевантаженні операторів new та delete.
Контрольні запитання
Варіанти обробки помилок, що не стосуються виняткових ситуацій.
Стандартні методи обробки виняткових ситуацій
Що значить «виняток» та як він утворюється?
Що робить оператор оператор catch()? Яки форми запису catch() ви знаєте?
ПЕРЕЛІК ЛІТЕРАТУРИ
Стивен Прата, Язык программирования C++. Лекции и упражнения. – Издательство «Вильямс», 2017.- 1248 с.
Бьерн Страуструп, Программирование. Принципы и практика с использованием C++. – Издательство «Вильямс», 2016.- 1328 с.
Эрих Гамма, Ричард Хелм, Ральф Джонсон, Джон Влиссидес, Приемы объектно-ориентированного проектирования. Паттерны проектирования. - СПб.: Питер, 2016.- 366 с.
Грэди Буч, Роберт А. Максимчук, Майкл У. Энгл, Бобби Дж. Янг, Джим Коналлен, Келли А. Хьюстон, Объектно-ориентированный анализ и проектирование с примерами приложений. – Издательство «Вильямс», 2010.- 720 с.
Шилд, Г. Самоучитель С++/ Шилд, Г./ СПб.-БХВ-Петербург, 2002. – 688 с.
Павловская, Т.А. С/С++. Программирование на языке высокого уровня.- СПб.: Питер, 2003.- 461 с.
Мэтт Вайсфельд, Объектно-ориентированное мышление. - СПб.: Питер, 2014. - 304 с.
Роберт Лафоре. Объектно-ориентированное программирование в С++. - СПб.: Питер, 2015.- 928 с.
Герб Саттер, Решение сложных задач на С++. – Издательство «Вильямс», 2017.- 400 с.
Брюс Эккель, Чак Эллисон, Философия C++. Практическое программирование. - СПб.: Питер, 2004.- 608 с.
Скотт Мейерс, Эффективное использование STL. - СПб.: Питер, 2002.- 224 с.
Глушаков С. В., Коваль А. В., Смирнов С. В., Язык программирования С++: Учебный курс /. — Харьков: Фолио; M.: OOO «Издательство АСТ» 2001. — 500 с.
Дейтел, Х.М. Как программировать на С++./Х.М. Дейтел, П.Дж. Дейтел. - М.: ЗАО "Изд. БИНОМ", 2001.- 1152 с.
Лафоре, Р. Объектно-ориентированное программирование в С++. Классика Computer Science.- СПб.: Питер, 2003.- 928 с.
Лесневский А.С. Объектно-ориентированное рограммирование для начинающих.-М:Бином,2005.-232 с.
http://www.ph4s.ru/bookprogramir_1.html
Міністерство освіти та науки України
Запорізький національний технічний університет
кафедра захисту інформації
Лабораторна робота № 1
Введення в класи
Виконав(ла)
ст. гр. РТ-817 В.В. Іванов
Прийняв
доцент Г.В. Неласа
Запоріжжя, 2018