ТОП 10:

Розробити контейнер класів фігур для управління групою фігур на екрані.



Створимо клас за допомогою якого можна керувати групою геометричних фігурами на екрані. В класі створено вказівник на групу фігур. Добавлені функції руху всіх геометричних фігур та добавлення геометричних фігур в контейнер.

class CConteiner {

private:

CShape *CShapes[MAX_SHAPE];/*масив фігур якими потрібно керувати на екарані монітора*/

int count;/*кількість заданих фігур*/

int exit;

public:

CConteiner();/*конструктор */

~CConteiner();/*деструктор*/

void action();/*виконує рух групи фігур на екрані*/

void add_shape(shape*);/*добавляє фігуру до контейнера */

};

CConteiner::CConteiner() {

count=0;

}

CConteiner::~CConteiner() {

}

void CConteiner::add_shape(shape* fig) {

if (count<MAX_SHAPE) {

shapes[count]=fig;

count++;

}

}

void CConteiner::action() {

for (int i=0;i<count;i++) {

shapes[i]->get_move()->current_movex=0;

shapes[i]->get_move()->current_movey=0;

}

 

while (1) {

exit=1;

for (int i=0;i<count;i++) {

if((shapes[i]->get_move()->current_movex<shapes[i]->get_move()->endx)

||(shapes[i]->get_move()->current_movey<shapes[i]->get_move()->endy)){

shapes[i]->move();

shapes[i]->get_move()->current_movex+=shapes[i]->get_move()->stepx;

shapes[i]->get_move()->current_movey+=shapes[i]->get_move()->stepy;

exit=0;

delay(10);

}

}

if (exit) break;

}

}

Літинг програми

#include <iostream.h>

#include <conio.h>

#include <graphics.h>

#include <stdio.h>

#include <math.h>

#include <dos.h>

 

структура точки яка зберігає в собі координати по х и по y

typedef struct _point {

int x;

int y;

} POINT, *PPOINT;

/* об’явлення типу функції для вирахування координат при русі фігури на екрані /*

typedef double (func)(double);

/* об’явлення типів руху фігури */

enum TYPE {MT_LINE=0, /* рух по прямій лінії */

MT_OBERT, /*поворот фігури */

MT_RESHAPE, /* зміна розмірів фігури */

MT_USER} ; /* рухи користувачів, тип руху може задавати користувач за допомогою функції */

/*Структура, яка зберігає в собі дані про рух фігури */

typedef struct _move {

TYPE type; /* тип руху */

int stepx; /* крок по х */

int stepy; /* крок по y */

int endx; /* кінцева точка по х */

int endy; /* кінцева точка по y */

int centr_x; /* центр координат */

int centr_y; /* центр координат */

func*func_x; /* функції руху по х */

func*func_y; /* функції руху по y */

void*tag; /* можна зберігати різні дані */

int erase; /* визначає стирати фігури при русі чи ні */

int current_movex; /* зарезервовано програмою */

int current_movey; /* зарезервовано програмою */

} MOVE,*PMOVE;

class shape {

protected:

POINT* p; /* вказівник на масив точок */

int count; /* кількість точок */

int current; /* поточна точка */

PMOVE m_move; /* структура типу руху фігури */

public:

shape(int); /* конструктор вхідний параметр кількість точок у фігури */

virtual~shape();/* деструктор */

void set_point(int,int); /* додає точку */

void set_move(PMOVE); /* встановлює тип руху */

Контрольні запитання

1.Що таке віртуальні функції?

2.Що таке поліморфізм?

3.Для чого призначені віртуальні функції?

4.У чому полягає ранній зв’язок?

5.Наведіть приклад раннього зв’язку.

6.У чому полягає пізній зв’язок?

7.Наведіть приклад пізнього зв’язку.

8.Наведіть приклад віртуальної функції.

9.Чим відрізняються віртуальні функції від перевантаження функцій?

10.Які операції можна використовувати з об’єктами базового та похідного класу?

11.Особливості роботи з масивами об’єктів базового та похідного класів.

12.Дайте визначення поняття поліморфізму.

13.Назвіть приклади прояву поліморфізму в мові С++.

14.Поясніть поняття статичного і динамічного поліморфізму.

15.У чому значення перевантаження функцій, на чому заснований

механізм перевантаження функцій?

16. Приведіть формат запису операторної функції.

17. Вкажіть повну і скорочену форми виклику операторної функцій.

18. Вкажіть обмеження, що накладаються на перевантаження

стандартних операцій.

19. Дайте визначення і вкажіть достоїнства і недоліки раннього

скріплення.

20. Дайте визначення і вкажіть достоїнства і недоліки пізнього зв’язування.

21. У чому значення віртуальних функцій?

22. Як здійснюється виклик віртуальних функцій?

23. Перерахуйте відмінності віртуальних і перенавантажених функцій.

24. Вкажіть, які результати будуть виведені на екран, якщо в головній функції.

 

 

Лабораторна робота №8

Тема: Розробка ієрархії класів з використанням абстрактних класів і чистих віртуальних функцій.

Мета: Набуття навичок в розробці класів з використанням властивостей поліморфізму.

Порядок виконання роботи

1. Ознайомитись з теоретичними основами розробки абстрактних класів.

2. Розробити ієрархію не менше, ніж 2 класів, та програму-відповідь (номер варіанту відповідає № студента в стиску групи).

3. Розробити програму для реалізації гри ПЯТНАШКИ.

4. Розробити 2-3 тести для перевірки правильності роботи розробленої програми.

5. Оформити звіт до лабораторної роботи.

Завдання 1

Варіант 1.

Описати клас, що реалізує стек. Написати програму, що використовує цей клас для моделювання Т-подібного сортувального вузла на залізниці. Програма повинна розділяти на два напрямки потяг, що складається з вагонів двох типів (на кожен напрямок формується потяг з вагонів одного типу). Передбачити можливість формування потягу з файлу і з клавіатури.

Варіант 2.

Описати клас, що реалізує бінарне дерево, що володіє можливістю додавання нових елементів, видалення існуючих, пошуку елемента по ключу, а також послідовного доступу до всіх елементів.

Написати програму, що використовує цей клас для представлення англо-російського словника. Програма повинна містити меню, що дозволяє здійснити перевірку всіх методів класу. Передбачити можливість формування словника з файлу і з клавіатури.

Варіант 3.

Побудувати систему класів для опису плоских геометричних фігур: коло, квадрат, прямокутник. Передбачити методи для створення об'єктів, переміщення на площини, зміни розмірів і обертання на заданий кут.

Написати програму, що демонструє роботу з цими класами. Програма повинна містити меню, що дозволяє здійснити перевірку всіх методів класів.

Варіант 4.

Побудувати клас, що містить інформацію про поштову адресу організації. Передбачити можливість роздільної зміни складових частин адреси, створення і знищення об'єктів цього класу. Довжину рядків задавати динамічно.

Написати програму, що демонструє роботу з цим класом. Програма повинна містити меню, що дозволяє здійснити перевірку всіх методів класу.

Варіант 5.

Скласти опис класу для представлення комплексних чисел. Забезпечити виконання операцій додавання, вирахування і множення комплексних чисел.

Написати програму, що демонструє роботу з цим класом. Програма повинна містити меню, що дозволяє здійснити перевірку всіх методів класу.

Варіант 6.

Скласти опис класу для об'єктів-векторів, що задаються координатами кінців у тривимірному просторі. Забезпечити операції додавання і вирахування векторів з одержанням нового вектора (суми або різниці), обчислення скалярного добутку двох векторів, довжини вектора, косинуса кута між векторами.

Написати програму, що демонструє роботу з цим класом. Програма повинна містити меню, що дозволяє здійснити перевірку всіх методів класу.

Варіант 7.

Скласти опис класу прямокутників зі сторонами, паралельними осям координат. Передбачити можливість переміщення прямокутників на площини, зміну розмірів, побудову найменшого прямокутника, що містить два заданих прямокутники, і прямокутника, що є загальною частиною (перетинанням) двох прямокутників.

Написати програму, що демонструє роботу з цим класом. Програма повинна містити меню, що дозволяє здійснити перевірку всіх методів класу.

Варіант 8.

Скласти опис класу для визначення одномірних масивів цілих чисел (векторів). Передбачити можливість звертання до окремого елемента масиву з контролем виходу за межі масиву, можливість завдання довільних границь індексів при створенні об'єкта і виконання операцій по елементного додавання і віднімання масивів з однаковими границями індексів, множення і ділення всіх елементів масиву на скаляр, виводу на екран елемента масиву по заданому індексу і всьому масиву.

Написати програму, що демонструє роботу з цим класом. Програма повинна містити меню, що дозволяє здійснити перевірку всіх методів класу.

Варіант 9.

Скласти опис класу для визначення одномірних масивів рядків фіксованої довжини. Передбачити можливість запиту до окремих рядків масиву по індексах, контроль виходу за межі масиву, виконання операцій по елементного зчеплення двох масивів з утворенням нового масиву, злиття двох масивів з виключенням повторюваних елементів, вивід на екран елемента масиву по заданому індексу і всьому масиву.

Написати програму, що демонструє роботу з цим класом. Програма повинна містити меню, що дозволяє здійснити перевірку всіх методів класу.

Варіант 10.

Скласти опис класу многочленів від однієї змінної, що задаються ступенем многочлена і масивом коефіцієнтів. Передбачити методи для обчислення значення многочлена для заданого аргументу, операції додавання, вирахування і множення многочленів з одержанням нового об'єкта-многочлена, вивід на екран опису многочлена.

Написати програму, що демонструє роботу з цим класом. Програма повинна містити меню, що дозволяє здійснити перевірку всіх методів класу.

Варіант 11.

Скласти опис класу одномірних масивів рядків, кожен рядок задається довжиною і покажчиком на виділену для нього пам’ять. Передбачити можливість запиту до окремих рядків масиву по індексах, контроль виходу за межі масивів, виконання операцій по елементного зчеплення двох масивів з утворенням нового масиву, злиття двох масивів з виключенням повторюваних елементів, вивід на екран елемента масиву і всього масиву.

Написати програму, що демонструє роботу з цим класом. Програма повинна містити меню, що дозволяє здійснити перевірку всіх методів класу.

Варіант 12.

Скласти опис класу, що забезпечує представлення матриці довільного розміру з можливістю зміни числа рядків і стовпців, виводу на екран підматриці будь-якого розміру і всієї матриці.

Написати програму, що демонструє роботу з цим класом. Програма повинна містити меню, що дозволяє здійснити перевірку всіх методів класу.

Варіант 13.

Написати клас для ефективної роботи з рядками, що дозволяє форматувати і порівнювати рядки, зберігати в рядках числові значення і “витягати ” їх. Для цього необхідно реалізувати:

- перевантажені оператори присвоювання і конкатенації;

- операції порівняння і приведення типів;

- перетворення в число будь-якого типу;

- форматний вивід рядка.

Написати програму, що демонструє роботу з цим класом. Програма повинна містити меню, що дозволяє здійснити перевірку всіх методів класу.

Варіант 14.

Описати клас «домашня бібліотека». Передбачити можливість роботи з довільним числом книг, пошуку книги по якій-небудь ознаці (наприклад, по автору чи по року видання), додавання книг у бібліотеку, видалення книг з неї, сортування книг по різних полях. Довжину рядків задавати динамічно.

Написати програму, що демонструє роботу з цим класом. Програма повинна містити меню, що дозволяє здійснити перевірку всіх методів класу.

Варіант 15.

Описати клас «записна книжка». Передбачити можливість роботи з довільним числом записів, пошуку запису по якій-небудь ознаці (наприклад, по прізвищу, даті народження чи номеру телефону), додавання і видалення записів, сортування по різних полях. Довжину рядків задавати динамічно.

Написати програму, що демонструє роботу з цим класом. Програма повинна містити меню, що дозволяє здійснити перевірку всіх методів класу.

Варіант 16.

Описати клас «студентська група». Передбачити можливість роботи з змінним числом студентів, пошуку студента по якій-небудь ознаці (наприклад, по прізвищу, даті народження чи номеру телефону), додавання і видалення записів, сортування по різних полях. Довжину рядків задавати динамічно.

Написати програму, що демонструє роботу з цим класом. Програма повинна містити меню, що дозволяє здійснити перевірку всіх методів класу.

Варіант 17.

Описати клас «множина», що дозволяє виконувати основні операції — додавання і видалення елемента, перетинання, об'єднання і різниця множин.

Написати програму, що демонструє роботу з цим класом. Програма повинна містити меню, що дозволяє здійснити перевірку всіх методів класу.

Варіант 18.

Описати клас, що реалізує стек. Написати програму, що використовує цей клас для відшукання проходу по лабіринту.

Лабіринт представляється у виді матриці, що складається з квадратів. Кожен квадрат або відкритий, або закритий. Вхід у закритий квадрат заборонений. Якщо квадрат відкритий, то вхід у нього можливий з боку, але не з кута. Кожен квадрат визначається його координатами в матриці. Після відшукання проходу програма друкує знайдений шлях у виді координат квадратів.

 

Варіант 19.

Описати клас «предметний покажчик». Кожен компонент покажчика містить слово і номери сторінок, на яких це слово зустрічається. Кількість номерів сторінок, що відносяться до одного слова, від одного до десяти. Передбачити можливість формування покажчика з клавіатури і з файлу, виводу покажчика, виводу номерів сторінок для заданого слова, видалення елемента з покажчика.

Написати програму, що демонструє роботу з цим класом. Програма повинна містити меню, що дозволяє здійснити перевірку всіх методів класу.

Контрольні запитання

1.Що таке віртуальна функція?

2.Для чого використовуються віртуальні функції?

3.Наведіть приклад використання віртуальної функції.

4.Які функції називаються чисто віртуальними? Для чого вони використовуються?

5.Що таке абстрактний клас?

6.Для чого використовуються абстрактні класи?

7.Наведіть приклад використання абстрактного класу.

8.Чим відрізняються звичайні та чисті віртуальні функції?

9.Основна форма опису чистої віртуальної функції?

 

 

Лабораторна робота №9

Тема: Особливості створення ієрархії класів з множинним спадкуванням.

Мета:Набуття навичок студентами в використанні множинного спадкування.

Порядок виконання роботи

1. Ознайомитись з теоретичною частиною даної теми.

2. Розробити ієрархію класів та структуру кожного класу відповідно Завдання 1.

3. Розробити програму для виконання Завдання 1.

4. Розробити 2-3 тести для перевірки правильності роботи розробленої програми.

5. Оформити звіт до лабораторної роботи.

Завдання 1

Розробити ієрархію класів з множинним спадкуванням відповідно до індивідуального варіанту.

Варіанти індивідуальних завдань:







Последнее изменение этой страницы: 2016-04-18; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.215.62.41 (0.013 с.)