Варіанти індивідуальних завдань 1. Створити клас – вектор, який має у закритій частині вказівник на дані цілого типу та кількість елементів. Визначити необхідні конструктори, деструктор. Перевантажити потокові операції введення і виведення елементів вектора, операції + , – , * , = та [ ] . 2. Створити клас – матриця, який у закритій частині містить вказівник на дані цілого типу, кількість рядків і стовпців. Визначити необхідні конструктори, деструктор. Перевантажити потокові операції введення і виведення елементів матриці, операції + , – , * та = . 3. Створити клас – дата з полями у закритій частині: день (1-31), місяць (1-12), рік (ціле число). Визначити необхідні конструктори, методи доступу, деструктор. Перевантажити потокові операції введення і виведення, операції + (збільшення на n днів) , – (різниця між двома датами), < та >= . 4. Створити клас – час з полями у закритій частині: година (0-23), хвилини (0-59), секунди (0-59). Визначити необхідні конструктори, методи доступу, деструктор. Перевантажити потокові операції введення і виведення, операції += (збільшення на n секунд), – (різниця між двома часами), <= та > . 5. Створити клас – прямокутник. У закритій частині описати поля – висоту і ширину. Визначити необхідні конструктори, методи доступу, деструктор. Перевантажити потокові операції введення і виведення, операції порівняння за площею < , > та == . 6. Створити клас – велике ціле число, яке не може бути зображене одним значенням вбудованих типів і умовно може бути утворене з декількох таких значень. У закритій частині визначити поля – вказівник на дані цілого типу та кількість елементів. Визначити необхідні конструктори, деструктор. Перевантажити потокові операції введення і виведення, операції + , – , < , > та == . 7. Створити клас – двозв’язний список. Визначити необхідні конструктори, деструктор. Перевантажити потокові операції введення і виведення, операції + (додавання елемента в початок списку), += (додавання елемента в кінець списку), – (вилучення заданого елемента зі списку), ++ (перехід до наступного елемента), -- (перехід до попереднього елемента). 8. Створити клас – однозв’язний список. Визначити необхідні конструктори, деструктор. Перевантажити потокові операції введення і виведення, операції + (додавання елемента в початок списку), += (додавання елемента в кінець списку), – (вилучення заданого елемента зі списку), ++ (перехід до наступного елемента), -- (перехід до попереднього елемента), [ ] (одержання елемента списку). 9. Створити клас – коло. У закритій частині описати поля – координати центру та радіус. Визначити необхідні конструктори, методи доступу, деструктор. Перевантажити потокові операції введення і виведення, операції + (збільшення радіусу), – (зменшення радіусу), порівняння за площею < , > та == . 10. Створити клас – ціле число. У закритій частині визначити поля – система числення і рядок символів, що відповідає числу. Визначити необхідні конструктори, методи доступу, деструктор. Перевантажити потокові операції введення і виведення, вважаючи що слід вводити десяткові числа і систему числення, а виводити – число у обраній системі. 11. Створити клас – квадрат з полями у закритій частині: координати головної діагоналі. Визначити необхідні конструктори, методи доступу, деструктор. Перевантажити потокові операції введення і виведення, операції + (збільшення головної діагоналі), – (зменшення головної діагоналі), порівняння за периметром < , > та == . 12. Створити клас – стек. Визначити необхідні конструктори, деструктор. Перевантажити потокові операції введення і виведення, операції + (додавання елемента у стек), – (вилучення елемента зі стеку), == та != . 13. Створити клас – рядок символів. У закритій частині описати вказівник на символьний тип (на початок рядка). Визначити необхідні конструктори, деструктор. Перевантажити потокові операції введення і виведення, операції + (конкатенації рядків), * (пошуку входження підрядка у рядок), – (вилучення підрядка з рядка). 14. Створити клас – квадратна матриця. У закритій частині описати поля: розмір матриці та вказівник на її початок в області динамічної пам’яті. Визначити необхідні конструктори, деструктор. Перевантажити потокові операції введення і виведення, порівняння за слідом < , > , == та !=. 15. Створити клас – множина цілих чисел. У закритій частині описати вказівник на цілий тип (на елементи множини). Визначити необхідні конструктори, деструктор. Перевантажити потокові операції введення і виведення елементів множини, + (об’єднання), – (різниці) та * (перетину) множин. 16. Створити клас – вектор, який має у закритій частині вказівник на дані дійсного типу та кількість елементів. Визначити необхідні конструктори, деструктор. Перевантажити потокові операції введення і виведення елементів вектора, операції унарний + (сортування елементів за зростанням), унарний – (сортування елементів за спаданням). 17. Створити клас – дата з полями у закритій частині: день (1-31), місяць (1-12), рік (ціле число). Визначити необхідні конструктори, методи доступу, деструктор. Перевантажити потокові операції введення і виведення, операції ++ (збільшення на 1 день) , –= (зменшення на n днів) та == . 18. Створити клас – час з полями у закритій частині: година (0-23), хвилини (0-59), секунди (0-59). Визначити необхідні конструктори, методи доступу, деструктор. Перевантажити потокові операції введення і виведення, операції ++ (збільшення на 1 хвилину) , -- (зменшення на 1 хвилину) та != . 19. Створити клас – цифровий лічильник. Визначити необхідні конструктори, деструктор. Перевантажити потокові операції введення і виведення, операції ++, --, == та !=. 20. Створити клас – дріб (раціональне число, що є відношенням двох цілих чисел). Визначити необхідні конструктори, деструктор. Перевантажити потокові операції введення і виведення, операції +, –, * , / . 21. Створити клас – трикутник. У закритій частині описати поля – довжини сторін. Визначити необхідні конструктори, методи доступу, деструктор. Перевантажити потокові операції введення і виведення, операції порівняння за периметром < , > , та ==, за площею <= , >= та != . 22. Створити клас – поліном. У закритій частині визначити поля – степінь полінома та вказівник на дані дійсного типу (масив коефіцієнтів). Визначити необхідні конструктори, деструктор. Перевантажити потокові операції введення і виведення, операції + (додавання поліномів), – (віднімання поліномів), * (обчислення значення полінома для заданого аргументу). 23. Створити клас – ціле число. У закритій частині визначити поле – значення цілого типу. Визначити необхідні конструктори, методи доступу, деструктор. Перевантажити потокові операції введення і виведення, операції + (додавання), – (віднімання), * (множення), / (цілочислове ділення), ~ (перевірка, чи число є простим). 24. Створити клас – дійсні числа. У закритій частині описати поле – значення дійсного типу. Визначити необхідні конструктори, методи доступу, деструктор. Перевантажити потокові операції введення і виведення, операції ( ) (ціла частина числа) [ ] (дробова частина числа). 25. Створити клас – множина цілих чисел. У закритій частині описати поле – вказівник на цілий тип (елементи множини). Визначити необхідні конструктори, деструктор. Перевантажити потокові операції введення і виведення, операції <= (підмножина), >= (надмножина), == (тотожність), != (нетотожність), ^ (визначення входження елемента у множину). 26. Створити клас – черга. Визначити необхідні конструктори, деструктор. Перевантажити потокові операції введення і виведення, операції ++ (додавання елемента у чергу), -- (вилучення елемента з черги), ! (перевірка наявності елементів у черзі). 27. Створити клас – рядок символів. У закритій частині описати вказівник на символьний тип (на початок рядка). Визначити необхідні конструктори, деструктор. Перевантажити потокові операції введення і виведення, операції порівняння рядків == , != , < , <= , > , >= . 28. Створити клас – матриця, який у закритій частині містить вказівник на дані дійсного типу, кількість рядків та стовпців. Визначити необхідні конструктори, методи доступу, деструктор. Перевантажити потокові операції введення і виведення, операції = , + , – , += , –= , *= . Лабораторна робота № 3 Тема роботи: Наслідування класів Мета роботи: ознайомитись зі способами та механізмами наслідування класів та навчитись використовувати їх для побудови об’єктно-орієнтованих програм. Послідовність роботи: 1. Ознайомитись з теоретичним матеріалом про наслідування класів. 2. Проаналізувати результати роботи програми у наведеному прикладі. 3. Для заданого варіанта завдання написати програму з використанням наслідування. 4. Оформити звіт про роботу за такою структурою: • назва роботи; • мета роботи; • послідовність роботи; • індивідуальне завдання; • текст програми; • контрольний приклад та результати роботи програми; • висновки. Приклад програми Створити клас ГЕОМЕТРИЧНА ФІГУРА з полями – координатами, кольором та стилем. Визначити конструктори, деструктор. Створити похідний клас КОЛО з полями: координати, колір, стиль, радіус. Визначити конструктори за замовчуванням і з різним числом параметрів, деструктор, функції малювання кола. Примітка. У програмі використано функції Win32 API для консольної графіки (за Р. Лафоре). #include <windows.h> #include <conio.h> #include <math.h> enum fstyle { SOLID_FILL, X_FILL, O_FILL, LIGHT_FILL, MEDIUM_FILL, DARK_FILL }; enum color { cBLACK=0, cDARK_BLUE=1, cDARK_GREEN=2, cDARK_CYAN=3, cDARK_RED=4, cDARK_MAGENTA=5, cBROWN=6, cLIGHT_GRAY=7, cDARK_GRAY=8, cBLUE=9, cGREEN=10, cCYAN=11, cRED=12, cMAGENTA=13, cYELLOW=14,cWHITE=15 }; void init_graphics(); void clear_screen(); void set_cursor_pos(int x, int y); void set_color(color fg, color bg = cBLACK); void set_fill_style(fstyle); void draw_circle(int x, int y, int rad); HANDLE hConsole; // дескриптор консолі char fill_char; // символ заповнення /////////////////////////////////////////////////////////// void init_graphics() { COORD console_size = {80, 25}; // відкрити канал введення/виведення на консоль hConsole = CreateFile(TEXT("CONOUT$"), GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0L, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0L); // задати розмір екрану 80x25 SetConsoleScreenBufferSize(hConsole, console_size); // текст білим по чорному SetConsoleTextAttribute( hConsole, (WORD)((0 << 4) | 15) ); fill_char ='\xDB';//символ заповнення за замовчуванням clear_screen(); } //--------------------------------------------------------- void clear_screen() { set_cursor_pos(1, 25); for(int j=0; j<25; j++) _putch('\n'); set_cursor_pos(1, 1); } //--------------------------------------------------------- void set_cursor_pos(int x, int y) { COORD cursor_pos; // початок у верхньому лівому куті cursor_pos.X = x - 1; // Windows починає з (0, 0) cursor_pos.Y = y - 1; // ми почнемо з (1, 1) SetConsoleCursorPosition(hConsole, cursor_pos); } //--------------------------------------------------------- void set_color(color foreground, color background) { SetConsoleTextAttribute( hConsole, (WORD)((background << 4) | foreground) ); } //--------------------------------------------------------- void set_fill_style(fstyle fs) { switch(fs) { case SOLID_FILL: fill_char = '\xDB'; break; case DARK_FILL: fill_char = '\xB0'; break; case MEDIUM_FILL: fill_char = '\xB1'; break; case LIGHT_FILL: fill_char = '\xB2'; break; case X_FILL: fill_char = 'X'; break; case O_FILL: fill_char = 'O'; break; } } //--------------------------------------------------------- void draw_circle(int xC, int yC, int radius) { double theta, increment, xF, pi=3.14159; int x, xN, yN; increment = 0.8 / static_cast<double>(radius); for(theta=0;theta<=pi/2;theta+=increment) { xF = radius * cos(theta); xN = static_cast<int>(xF * 2 / 1); yN = static_cast<int>(radius * sin(theta) + 0.5); x = xC-xN; while(x <= xC+xN) { set_cursor_pos(x, yC-yN); _putch(fill_char); // верхня лінія set_cursor_pos(x++,yC+yN); _putch(fill_char); // нижня лінія } } } /////////////////////////////////////////////////////////// class shape // базовий класс { protected: int xCo, yCo; // координати фігури color fillcolor; // колір fstyle fillstyle; // стиль public: // конструктор без параметрів shape () : xCo(0), yCo(0), fillcolor(cWHITE), fillstyle(SOLID_FILL) { } // конструктор з параметрами shape (int x, int y, color fc, fstyle fs) : xCo(x), yCo(y), fillcolor(fc), fillstyle(fs) { } // деструктор ~shape () { } // функція задання кольору і стилю const void draw() { set_color (fillcolor); set_fill_style( fillstyle ); } }; /////////////////////////////////////////////////////////// class circle : public shape { private: int radius; // радіус, а xCo і yCo будуть // координатами центру public: // конструктор без параметрів circle() : shape() { } // конструктор з параметрами circle (int x, int y, int r, color fc, fstyle fs) : shape (x,y,fc,fs), radius(r) { } // деструктор ~circle () { } // функція малювання кола const void draw() { shape::draw(); draw_circle (xCo, yCo, radius); } }; int main () { init_graphics (); // ініціалізуємо систему // відображення графіки circle cir (40, 12, 5, cGREEN, X_FILL); // створюємо коло cir.draw (); // малюємо set_cursor_pos(1, 25); // переводимо курсор у низ // екрану set_color (cLIGHT_GRAY); return 0; } |