Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка2011(12 лаб)_декабрь.doc
Скачиваний:
4
Добавлен:
26.08.2019
Размер:
1.1 Mб
Скачать

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

    1. У чому полягає просте спадкування?

    2. У чому полягає множинне спадкування?

    3. Захищені базового члени класу.

    4. Захищені похідного члени класу

    5. Правила доступу до базових класів відносно похідних класів.

    6. Вимоги до конструкторів базового та похідних класів.

    7. Вимоги до деструктора базового та похідних класів.

    8. Умови спадкування членів базового класу.

    9. Умови формування ієрархії класів.

    10. Умови спадкування в похідних класах.

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

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

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

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

  1. Ознайомитися з теоретичними основами розробки програм, що використовують перевантаження операторів та функцій.

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

  3. Розробити програму, яка використовує ієрархію класів п.2 для роботи з не менш ніж двома об’єктами.

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

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

Завдання 1

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

Варіант 1.

Описати базовий клас РЯДОК.

Обов'язкові поля класу:

  • покажчик на char — зберігає адресу динамічно виділеної пам'яті для розміщення символів рядка;

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

Обов'язкові методи повинні виконувати наступні дії:

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

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

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

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

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

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

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

Описати похідний від РЯДОК клас РЯДОК_ІДЕНТИФІКАТОР.

Рядки даного класу будуються за правилами запису ідентифікаторів у мові С і можуть містити в собі тільки ті символи, що можуть входити до складу З-ідентифікаторів. Якщо вихідні дані суперечать правилам запису ідентифікатора, то створюється порожній РЯДОК_ІДЕНТИФІКАТОР.

Обов'язкові методи:

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

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

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

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

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

  • переведення усіх символів рядка в нижній регістр;

  • пошук першого входження символу в рядок;

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

Перевизначити наступні операції:

  • присвоювання (=);

  • додавання (+) — операція конкатенації рядків;

  • віднімання (–) — з рядка (перший операнд) видаляються всі символи, що входять у рядок — другий операнд, при цьому може вийти порожній рядок;

  • оператор > — перевірка на більше. Рядок вважається більше іншого, якщо код символу першого рядка в i-й позиції (i змінюється від 0 до n–1, де n — довжина більш короткого рядка) більше коду символу в тій же позиції в другому рядку, довжини рядків можуть не збігатися.

  • оператор < — перевірка на менше. Рядок вважається менше іншого, якщо код символу першого рядка в i-й позиції (i змінюється від 0 до n–1, де n — довжина більш короткого рядка) менше коду символу в тій же позиції коду символу в тій же позиції в другому рядку, довжини рядків можуть не збігатися.

Розроблювач вправі вводити кожне (з обґрунтуванням необхідності) число додаткових полів і методів.

Написати тестову програму, яка:

  • динамічно виділяє масив покажчиків на базовий клас (4–6);

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

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

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

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

Варіант 2.

Описати базовий клас РЯДОК.

Обов'язкові поля класу:

  • покажчик на char — зберігає адресу динамічно виділеної пам'яті для розміщення символів рядка;

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

Обов'язкові методи повинні виконувати наступні дії:

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

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

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

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

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

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

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

Описати похідний від РЯДОК клас БІТОВИЙ_РЯДОК.

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

Від’ємні числа зберігаються в додатковому коді.

Обов'язкові методи:

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

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

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

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

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

Перевизначити наступні операції (довжина рядка результату дорівнює довжині більшого з рядків; у разі потреби більш короткий бітовий рядок розширюється вліво знаковим розрядом):

  • присвоювання (=);

  • додавання (+) — арифметична сума рядків;

  • операція (==) — перевірка на рівність.

Розроблювач вправі вводити кожне (з обґрунтуванням необхідності) число додаткових полів і методів.

Написати тестову програму, яка:

  • динамічно виділяє масив покажчиків на базовий клас (4–6);

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

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

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

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

Варіант 3.

Описати базовий клас РЯДОК.

Обов'язкові поля класу:

  • покажчик на char — зберігає адресу динамічно виділеної пам'яті для розміщення символів рядка;

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

Обов'язкові методи повинні виконувати наступні дії:

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

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

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

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

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

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

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

Описати похідний від РЯДОК клас ДЕСЯТКОВИЙ_РЯДОК.

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

Обов'язкові методи:

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

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

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

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

  • метод, що визначає, чи можна представити дане число у форматі int;

Перевизначити наступні операції:

  • присвоювання (=);

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

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

  • операція < — перевірка на менше (за значенням);

Розроблювач вправі вводити кожне (з обґрунтуванням необхідності) число додаткових полів і методів.

Написати тестову програму, яка:

  • динамічно виділяє масив покажчиків на базовий клас (4–6);

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

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

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

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

Варіант 4.

Описати базовий клас РЯДОК.

Обов’язкові поля класу:

  • покажчик на char — зберігає адресу динамічно виділеної пам’яті для розміщення символів рядка;

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

Обов’язкові методи повинні виконувати наступні дії:

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

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

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

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

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

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

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

Похідний від РЯДОК клас КОМПЛЕКСНЕ_ЧИСЛО.

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

Перше поле задає значення реальної частини числа, а друге – уявної. Кожне з полів може містити тільки символи десяткових цифр і символи – і +, що задають знак числа. Символи – чи + можуть знаходитися тільки в першій позиції числа, причому символ + може бути відсутнім, у цьому випадку число вважається додатнім. Якщо в складі ініціалізуючого рядка будуть зустрінуті будь-які символи, відмінні від припустимих, КОМПЛЕКСНЕ_ЧИСЛО приймає нульове значення. Приклади рядків: 33i12, –7i100, +5і-21.

Обов’язкові методи:

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

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

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

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

Перевизначити наступні операції:

  • присвоювання (=);

  • операція (==) — перевірка на рівність;

  • множення (*) — множення чисел.

Розроблювач вправі вводити кожне (з обґрунтуванням необхідності) число додаткових полів і методів.

Написати тестову програму, яка:

  • динамічно виділяє масив покажчиків на базовий клас (4–6);

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

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

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

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

Варіант 5.

Створити динамічний клас для роботи з рядками. Максимальна довжина послідовності – 254. Перший байт повинен містити інформацію про фактичну кількість елементів масиву. Здійснити перевантаження операцій:

" = "– присвоєння,

" + " – конкатенація (з’єднання) рядків,

" <= " – відношення "менше чи дорівнює",

" >= " – відношення "більше чи дорівнює",

" == " – відношення "дорівнює",

" != " – відношення "не дорівнює".

" <= " – відношення включення (перевіряється, чи є множина, надана лівим операндом, підмножиною множини, наданої правим),

" == " – еквівалентність множин,

" != " – нееквівалентність множин,

" << " – належність (перевіряється, чи належить значення, що надане лівим  операндом, до множини, що надана правим операндом).

Варіант 6.

Розробити ієрархію класів для роботи з одновимірними динамічними масивами з перевантаженими операторами new[] і delete[], яка містить: два конструктора, деструктор, функцію визначення довжини тексту, функцію визначення кількості рядків в тексті, функцію визначення кількості слів в тексті, функцію визначення кількості пробілів у тексті, функцію видалення зайвих пробілів з тексту.

Варіант 7.

Розробити ієрархію класів для роботи з двовимірними динамічними масивами з перевантаженим оператором інкремента (--) та декремента(++), яка містить: два конструктора, деструктор, функцію визначення довжини тексту, функцію визначення кількості рядків в тексті, функцію визначення кількості слів в тексті, функцію визначення кількості пробілів у тексті, функцію видалення зайвих пробілів з тексту.