Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие КНЕУ.doc
Скачиваний:
24
Добавлен:
07.03.2016
Размер:
3.9 Mб
Скачать

Лабораторна робота 9. Спадкоємство

Теоретичний матеріал: розділ 8.

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

Функція Main повинна містити масив з елементів базового класу, заповнений посиланнями на похідні класи. У цій функції повинне демонструватися використання всіх розроблених елементів класів.

Варіант 1

Створити клас Point (крапка). На його основі створити класи ColoredPoint і Line (лінія) . На основі класу Line створити класи Coloredline і Polyline (багатокутник) . У класах описати наступні елементи:

  • конструктори з параметрами і конструктори за умовчанням;

  • властивості для установки і набуття значень всіх координат, а також для зміни кольору і отримання поточного кольору;

  • для ліній - методи зміни кута повороту ліній щодо першої крапки;

  • для багатокутника - метод масштабування.

Варіант 2

Створити абстрактний клас Vehicle (транспортний засіб). На його основі реалізувати класи Plane (літак), Саr (автомобіль) і Ship (корабель). Класи повинні мати можливість задавати і отримувати координати і параметри засобів пересування (ціна, швидкість, рік випуску і т. п.) за допомогою властивостей. Для літака має бути визначена висота, для літака і корабля - кількість пасажирів, для корабля - порт приписки. Динамічні характеристики задати за допомогою методів.

Варіант 3

Описати базовий клас Рядок. Обов'язкові поля класу:

  • поле для зберігання символів рядка;

  • значення типу word для зберігання довжини рядка в байтах.

Реалізувати обов'язкові методи наступного призначення:

  • конструктор без параметрів;

  • конструктор, що приймає як параметр рядковий літерал;

  • конструктор, що приймає як параметр символ;

  • метод отримання довжини рядка;

  • метод очищення рядка (зробити рядок порожнім).

Описати похідний від Рядок клас Комплексне_число.

Рядки даного класу складаються з двох полів, розділених символом i.

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

33i12

-7i100

+5i - 21

Для класу Комплексне_число визначити наступні методи:

  • перевірка на рівність;

  • складання чисел;

  • множення чисел.

Варіант 4

Описати базовий клас Рядок відповідно до варіанту 3. Описати похідний від Рядок клас Десятичний_ рядок.

Рядки даного класу можуть містити тільки символи десяткових цифр і символи - і +, задаючи знак числа. Символи - або + можуть знаходитися тільки в першій позиції числа, причому символ + може бути відсутнім, в цьому випадку число вважається додатним. Якщо у складі рядка будуть зустрінуті будь-які символи, відмінні від допустимих, клас Десятичний_рядок приймає нульове значення. Вміст даних рядків розглядається як десяткове число.

Для класу визначити наступні методи:

  • конструктор, що приймає як параметр число;

  • арифметична різниця рядків;

  • перевірка на більше (за значенням);

  • перевірка на менше (за значенням).

Вариант 5

Описати базовий клас Рядок відповідно до варіанту 3.

Описати похідний від Рядок клас Бітовий_ рядок.

Рядки даного класу можуть містити тільки символи '0' або ' 1'. Якщо у складі рядка будуть зустрінуті будь-які символи, відмінні від допустимих, клас Бітовий_ рядок приймає нульове значення. Вміст даних рядків розглядається як двійкове число. Від’ємні числа зберігаються в додатковому коді.

Для класу Бітовий_ рядок визначити наступні методи:

  • конструктор, що приймає як параметр рядковий літерал;

  • деструктор;

  • зміна знаку на протилежний (переклад числа в додатковий код);

  • привласнення;

  • обчислення арифметичної суми рядків;

  • перевірка на рівність.

У разі потреби коротший бітовий рядок розширюється вліво знаковим розрядом.

Варіант 6

1. Описати базовий клас Елемент.

Закриті поля:

  • ім'я елементу (рядок символів);

  • кількість входів елементу;

  • кількість виходів елементу.

Методи:

  • конструктор класу без параметрів;

  • конструктор, який задає ім'я і встановлює рівним 1 кількість входів і виходів;

  • конструктор, який задає им’я значення всіх полів елементу.

Властивості:

  • ім'я елементу (тільки читання);

  • кількість входів елементу;

  • кількість виходів елементу.

2. На основі класу Елемент описати похідний клас Комбінаційний, такий, що є комбінаційним елементом (двійковий вентиль), який може мати декілька входів і один вихід.

Поле - масив значень входів.

Методи:

  • конструктори;

  • метод, який задає значення на входах екземпляра класу;

  • метод, що дозволяє опитувати стан окремого входу екземпляра класу;

  • метод, що обчислює значення виходу (по варіанту завдання).

3. На основі класу Елемент описати похідний клас Пам'ять, що є тригером. Тригер має входи, відповідні типу тригера (див. далі варіант завдання), і входи установки і скидання. Всі тригери вважаються за синхронні, сам синхровхід до складу тригера не включається.

Поля:

  • масив значень входів об'єкту класу, в масиві враховуються всі входи (що управляють і інформаційні);

  • перебування на прямому виході тригера;

  • перебування на інверсному виході тригера.

Методи:

  • конструктор (за умовчанням скидає екземпляр класу);

  • конструктор копіювання;

  • метод, який задає значення на входах екземпляра класу;

  • методи, що дозволяють опитувати стани окремого входу екземпляра класу;

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

  • метод, для перевантаження операції = = .

4 . Створити клас Регістр, використовуючи клас Пам'ять як вкладений клас.

Поля:

  • стан входу “Скидання” - один для екземпляра класу;

  • стан входу “Установка” - один для екземпляра класу;

  • масив типу Пам'ять заданої у варіанті розмірності;

  • масив (масиви), що містить значення на відповідних входах елементів масиву типу Пам'ять.

Методи:

  • метод, що задає значення на входах екземпляра класу;

  • метод, що дозволяє опитувати стан окремого виходу екземпляра класу;

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

Всі поля класів Елемент, Комбінаційний і Пам'ять мають бути описані з ключовим словом рrivаtе.

У завданні перераховані тільки обов'язкові члени і методи класу. Можна задавати додаткові члени і методи, якщо вони не відміняють обов'язкові і забезпечують додаткові зручності при роботі з даними класами, наприклад, описати функції обчислення виходу/стану як віртуальні.

5. Для перевірки функціонування створених класів написати програму, що використовує ці класи. У програмі мають бути продемонстровані всі властивості створених класів.

Конкретний тип комбінаційного елементу, тип тригера і розрядність регістра вибираються відповідно до варіанту завдання:

Варіант

Комбінаційний елемент

Число входів

Тригер

Розрядність регістра

1

И-НЕ

4

RS

8

2

ИЛИ

5

RST

10

3

МОД2-НЕ

6

D

12

4

И

8

Т

8

5

ИЛИ-НЕ

8

V

9

6

И

4

RS

10

7

ИЛИ-НЕ

5

JK

11

8

МОД2

5

D

8

9

И

4

Т

10

10

ИЛИ

3

JK

8

11

И-НЕ

3

RS

12

12

ИЛИ-НЕ

4

RST

4

13

МОД2

5

D

10

14

МОД2-НЕ

6

Т

10

15

ИЛИ-НЕ

8

V

10

16

И

8

JK

6

17

И-НЕ

8

RS

10

18

ИЛИ

8

Т

10

19

МОД2

6

JK

8

20

МОД2-НЕ

5

V

10