Студопедия — Перевантаження бінарних операцій
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Перевантаження бінарних операцій






Бінарні операції можуть бути перевантажені таким же чином, як і унарні. У наведеному вище коді перевантажена операція «+», а у головному коді зустрічається стрічка, де проводиться сумування двох об’єктів (c3=c1+c2). Оголошення в класі Counter виглядає наступним чином:

Counter operator+ (Counter);

Ця операція повертає значення типу Counter і приймає один аргумент того ж типу.

Для обчислення значення функції operator+ ми спочатку додаємо значення hours та minutes обох операндів (коректуючи їх в разі необхідності). Отримані значення h та m ми згодом використовуємопри ініціалізації безіменного об’єкту Counter, який буде повертати значення:

return Counter(h, m);

У виразі

c3=c1+c2;

важливо розуміти, до яких об’єктів будуть відноситись аргументи і значення, що повертаються. Коли компілятор зустріне цей вираз, то він переглядає типи аргументів, знайшовши тільки аргументи типу Counter, він виконає операції класу Counter operator+ (Counter);. Але який із об’єктів використовується в якості аргумента – с1 чи с2? І чи немає потреби використовувати два аргументи, оскільки ми додаєма 2 об’єкти?

Існує правило: об’єкт, що розташований зліва сторони операції (у нашому випадку с1), викликає функцію оператора. Об’єкт, що стоїть справа знака операції повинен бути переданий у функцію в якості аргумента. Операція повертає значення, яке ми згодом використовуємо для власних потреб. У функції до лівого операнда ми маємо прямий доступ, використовуючи hours та minutes, так як це об’єкт, що викликав функцію. До правого операнда ми маємо доступ як до аргумента функції, тобто t2.hours та t2.minutes.

Якщо узагальнити вищесказане, то можна сказати, що перевантаженій операції завжди потрібна кількість аргументів, на одиницю менша, ніж кількість операндів, в зв’язку з тим, що один із операндів є об’єктом, що викликає функцію. Тому для унарних операцій не потрібні аргументи (за винятком функцій і операторів, які є дружніми для класу).

4.4. Розширений опис завдання

Створити клас та описати 3–4 перевантажені методи згідно індивідуального завдання.

Деталізація завдання

1. Частина 1. «Створення класу»

1.1. Описати клас згідно індивідуального завдання, обов’язково створивши у

ньому:

1.1.1. принаймні по одному відкритому (public), закритому (private) та

захищеному (protected) полю;

1.1.2. конструктор по замовчуванню, конструктор з параметрами;

1.1.3. деструктор;

1.1.4. відкриті (public) методи-аксесори для читання та запису закритих та

захищених полів;

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

1.1.6. власні поля та методи, що дозволяють розширити можливості класу відповідно до тематики індивідуального завдання;

1.1.7. метод виводу екземпляру класу на екран;

1.1.8. консольний метод ініціалізації екземпляру класу (вводу з клавіатури);

1.2. У головній програмі:

1.2.1. створити принаймні один екземпляр класу та принаймні один вказівник на екземпляр цього ж класу, проілюструвавши роботу різних типів конструкторів;

1.2.2. продемонструвати звертання до полів екземпляру класу та використання методів-аксесорів;

1.2.3. створити посилання на екземпляр класу через вказівник та продемонструвати використання полів та методів класу через цей вказівник на екземпляр класу;

1.2.4. динамічно створити (new) екземпляр класу, зберігши його адресу у раніше описаному вказівнику, продемонструвати роботу з ним та видалити (delete);

1.2.5. продемонструвати роботу з усіма додатково створеними полями та методами;

1.2.6. продемонструвати роботу з усіма описаними методами вводу/виводу класу.

2. Частина 2. «Перевантаження методів класу»

2.1. Описати клас із частини 1 з перевантаженим методом відповідно до індивідуального завдання.

2.2. У головній програмі проілюструвати роботу перевантажених методів.

 

4.5. Індивідуальні завдання

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

1. Клас «Торт» з полями:

· назва (public);

· крем (private);

· вітальний напис (protected);

· кількість шматків

· вага;

· ціна за 1кг;

· вартість доставки

За допомогою методів класу передбачити наступні можливості:

· зміна назви;

· обчислення вартості торту;

· зміну ціни торту, якщо назва відповідає заданій;

Перевантажені методи:

· розрізання — з одним параметром (ціле число) — встановлює кількість шматківна скільки необхідно ділити торт; якщо не передано ні одного параметра – повертає зменшує кількість відрізаних частин на одиницю.

· встановлення вартості доставки: без параметрів – встановлює вартість доставки рівну 0; якщо предано один цілий параметр с – обчислює вартість доставки як с *20.

2. Клас «Квітка» з полями:

· назва (public),

· кількість пелюсток (private),

· колір (protected);

· місяць цвітіння;

· висота;

· тип суцвіття;

· тип кореневої системи.

Створити масив об’єктів, та за допомогою методів класу передбачити наступні можливості:

· вивід всієї інформаціїї про об’єкт;

· вивід всіх квітів, висота яких більша за вказану;

· вивід всіх квітів, назва яких починається з певної букви;

Перевантажений метод:

місяць цвітіння — числовий або текстовий параметр — встановлює місяць цвітіння квітки, якщо передано один параметр якогось із двох типів; повертає текстове значення місяця цвітіння квітки, якщо не передано ні одного параметра.

3. Клас «Птах» з полями:

· назва (public);

· кількість пташенят (private);

· вага (protected);

· висота польоту;

· колір;

· розмах крил;

· батьківщина.

Створити масив об’єктів, та за допомогою методів класу передбачити наступні можливості:

· виведення всіх птахів, розмах крил яких я більше заданого;

· пошук пташки, що літає найвище;

· пошук птахів, вага яких знаходиться у певному діапазоні.

Перевантажений метод висота польоту:

· 1 цілий параметр – встановлює максимально допустиму висоту польоту;

· Цілий та рядковий параметр, що вказує одиниці виміру (метри або кілометри) – встановлює максимально допустиму висоту;

· Без параметрів – повертає максимально допустиму висоту польоту у вигляді стрічки із зазначенням висоти та одиниць виміру.

4. Клас «Коробка» з полями:

· назва (public);

· форма (private);

· матеріал (protected);

· структура «адреса доставки» з полями вулиця, будинок, квартира;

· вартість доставки;

· форма оплати;

За допомогою методів класу передбачити наступні можливості:

· виведення адреси доставки;

· зміна вартості доставки;

· зміна назви;

Перевантажені методи:

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

· форма оплати – якщо передано один цілий параметр встановлює форму оплати як готівкову, якщо передано 2 параметри (ціле, ціле) – встановлює форму оплати як безготівкому, причому перший параметр слугує номером картки.

5. Клас «Військовий» з полями:

· ім’я (public);

· строк служби (private);

· звання (protected);

· структура дата народження;

· номер телефону;

· номер частини;

· рід військ;

Створити масив об’єктів, та за допомогою методів класу передбачити наступні можливості:

· пошук всіх осіб певного звання;

· пошук осіб, строк служби яких знаходится у заданому діапазоні;

· зніна заданого номеру телефону;

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

6. Клас «Сховище» з полями

· назва (public);

· предмети (private);

· тип (protected);

· інвентарний номер;

· адреса;

· вага предмету.

За допомогою методів класу передбачити наступні можливості:

· переміщення предмета з одного сховища у інше (зміна адреси)

· вивід предметів, що містяться у сховищі, назва яких починається на певну букву;

· сортування предметів у сховищі згідно лексикографічної послідовності.

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

7. Клас «Планета» з полями:

· назва (public);

· супутники (private);

· діаметр (protected);

· відстань до Сонця;

· маса;

· відстань до супутників;

· маса супутників.

Створити масив об’єктів, та за допомогою методів класу передбачити наступні можливості:

· вивід планет у послідовності згідно з відстанню до сонця;

· пошук планет із найбільшою кількістю супутників;

· пошук найбільшою за масою об’єкта (маса планети + маси всіх супутників).

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

8. Клас «Таксі» з полями:

· пасажир (public);

· водії (private);

· адреси (protected);

· марка автомобіля;

· пасажиромісткість автомобіля;

· державний номер;

· вартість замовлення.

Створити масив об’єктів, та за допомогою методів класу передбачити наступні можливості:

· підрахунок автомобілів певної марки;

· пошук автомобіля за параметром „кількість пасажирів”;

· встановлення знижки.

Перевантажений метод: замовлення — з одним параметром (адреса – текст), з двома параметрами (водій – ціле число, адреса – текст), або без параметрів — повертає ціле число (номер водія, призначеного на виклик), якщо передано один параметр; повертає true/false, як відповідь на можливість замовити конкретного водія за заданою адресою, якщо передано два параметри; повертає співвідношення вільних та замовлених водіїв (дійсне число), якщо викликано без параметрів. При формуванні замовлення поле «пасажир» використовується для ідентифікації замовника — припускається, що замовник повинен записати у це поле своє прізвище і тоді викликати метод «замовлення».

9. Клас «Порт» з полями:

· назва (public);

· площа (private);

· кількість населення (protected);

· тип (річковий, морський або проміжний);

· кількість кораблів, що щоденно можуть обслуговуватись;

· кількість кораблів, що можуть обслуговуватись одночасно;

· відстань до найближчого порту;

· назва найближчого порту;

Створити масив об’єктів, та за допомогою методів класу передбачити наступні можливості:

· сортування портів за кількістю населення;

· пошук найбільшого за площею порту;

· перевірка можливості обслуговування певної кількості кораблів за 1 день (якщо неможливо, то виводити скільки днів необхідно).

Перевантажений метод: відстань до найближчого порту:

* цілий числовий параметр(означає, что відстань задана в кілометрах)

* цілий числовий параметр, текстовий параметр, що вказує довжину та одиниці їх виміру одиниці виміру (метри або милі).

10. Клас «Країна» з полями:

· назва (public);

· столиця (private);

· кількість населення (protected);

· площа;

· сусіди;

· наявність виходу в море;

· середня заробітна плата;

Створити масив об’єктів, та за допомогою методів класу передбачити наступні можливості:

· підрахунок кількості сусідів;

· сортування за назвою;

· сортування за столицею;

Перевантажений метод: відстань до найближчої столиці:

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

* цілий числовий параметр, текстовий параметр, що вказує відстань(цілий параметр) і тип траспорту (текстовий) – літак, поїзд, корабель.

* текстовий, цілий – встановлює нове значення відстані сполученням певним видом транспорту

11. Клас «Фотоапарат» з полями:

· марка (public);

· тип матриці (private);

· чутливість матриці (protected);

· модель;

· діагональ екрану;

· об’єм накопичувача;

· фото (містить назву, тип і розмір).

За допомогою методів класу передбачити наступні можливості:

· пошук найбільшого фото за розміром;

· обчислення кількості збережених фото;

Перевантажений метод: збереження фото — без параметрів – нарощує кількість фото на 1; з одним параметром (розмір однієї фотографії) — повертає максимальну кількість фото, що можуть бути вміщені на карту памяті, з двома параметрами (кількість фото та їх розмір) ­– повертає значення типу bool, яке вказує, чи достатньо місця на карті пам’яті для розміщення даних фото.

12. Клас «Квартира» з полями:

· забудовник (public);

· кількість кімнат (private);

· матеріал будинку (protected);

· тип (люкс, стандарт, бюджет);

· площа;

· вартість 1м.кв.;

· адреса;

· поверх.

Створити масив об’єктів, та за допомогою методів класу передбачити наступні можливості:

· пошук усіх квартир певного типу;

· пошук найбільшої за площею квартири;

· пошук квартир на заданому поверсі.

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

13. Клас «Автомобіль» з полями:

· марка (public);

· об’єм двигуна (private);

· колір (protected);

· кількість місць;

· тип (седан, хетчбек, кабріолет);

· максимальна швидкість;

· ціна;

· рік випуску.

Створити масив об’єктів, та за допомогою методів класу передбачити наступні можливості:

· пошук всіх автомобілів певного типу;

· пошук „найстаршого” автомобіля;

· пошук авто певного цінового діапазону.

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

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

1. Що таке механізм перевантаження оператора?

2. Назвіть причини необхідності перевантаження операторів?

3. Як можна перевантажити оператор для класу?

5. Які оператори перевантажувати не можна?

6. Яка різниця між перевантаженням бінарних та унарних операторів?

7. Опишіть синтаксис перевантаження унарних операторів класу.

8. У чому полягає специфіка перевантаження операторів зсуву

9. У яких випадках перевантаження операцій визначається як дружня функція до класу?

 
 

Лабораторна робота №5. одинарне Успадкування

МЕТА РОБОТИ: засвоїти основні принципи та поняття успадкування, здобути практичні навики при роботі з «батьківськими» та «нащадковими» класами.

5.1. Програма роботи

5.1.1 Отримати завдання.

5.1.2. Написати програми відповідних класів, основну та відповідні допоміжні функції, згідно з вказівками до виконання роботи.

5.1.3. Підготувати власні коректні вхідні дані (вказати їх формат і значення) і проаналізувати їх.

5.1.4. Оформити електронний звіт про роботу та захистити її.

5.2. Вказівки до виконання роботи

5.2.1. Студент, згідно з індивідуальним номером, вибирає своє завдання.

5.2.2. Оголошення класу (структури), основну та відповідні допоміжні функції необхідно запрограмувати так, як це показано

5.2.3. Власних вхідних даних необхідно підготувати не менше двох комплектів. Їхні значення мають бути коректними, знаходитися в розумних межах і відповідати тим умовам, які стосуються індивідуального завдання. Після проведення розрахунків отримані результати необхідно проаналізувати і занести до звіту.

5.2.4. Звіт має містити такі розділи:

● мету роботи та завдання з записаною умовою задачі;

● коди всіх використовуваних.h і.ccp файлів, а також пояснення до них;

● результати реалізації програми;

● діаграму класів та діаграму варіантів використання з поясненням;

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

5.3. Теоретичні відомості

Успадкування – один з трьох фундаментальних принципів об'єктно-орієнтованого про­гра­мування, оскільки саме завдяки йому уможливлюється створення ієрархічних класифікацій. Використовуючи успадкування, можна створити загальний клас, який визначає характеристики, що є властиві множині взаємопов'язаних елементів. Цей клас потім може успадковуватися іншими, вузькоспеціалізованими класами з додаванням у кожен з них своїх, унікальних особли­востей.

У стандартній термінології мови програмування C++ клас, який успадковується, називається базовим. Клас, який успадковує базовий клас, називається похідним. Похідний клас можна використовувати як базовий для іншого похідного класу. Таким шляхом і будується багаторівнева ієрархія класів.

Ієрархічність та її різновиди. Для подолання складності системи будують як ієрархічні – це впорядкування абстракцій, розташування їх по рівнях. Розрізняють два різновиди ієрархій: спадковість (ієрархія класів) та агрегація (ієрархія об’єктів).

Спадковість – це механізм отримання нового класу з існуючих шляхом запозичення структурної або функціональної частини одного або декількох інших. Відповідно розрізняють одиночне та множинне успадкування. Спадковість створює таку ієрархію абстракцій, у якій підкласи (класи-нащадки) успадковують будову і поведінку одного або декількох суперкласів (базових, батьківських класів). Кажуть, що спадковість описується відношенням «is-a» і породжує ієрархію «узагальнення-спеціалізація».

Агрегація – це такий різновид ієрархії, який передбачаєвикористання об’єктів одного класу в оголошенні іншого класу. Агрегацію (включення) можна описати відношенням «part of» або «бути частиною». Клас, що містить поля – об’єкти інших класів, називається агрегатом або контейнером.

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

class Student

{char* name, *group; }

Class Starosta: public Student {int level; }

Клас Starosta похідний від класу Student, а Student – базовий для Starosta.

Клас Starosta крім своїх власних членів (level) містить і члени класу Student.

Виведення похідного класу із базового робить його підтипом базового. Тому вказівник на базовий клас можна використовувати як вказівник на похідний (але не навпаки). Наприклад:

void f(Student * p, Starosta *q)

{Student *KA01 [10];

KA01[0] = p;

KA02[1] = q; …}

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

У С++ існує три різновиди успадкування:

● відкрите (public),

● захищене (protected). При захищеному успадкуванні відкриті члени базового класу стають захищеними членами похідного класу. Вони видимі лише функціям базового і похідного класів і є невидимими з інших точок програми. Таким чином, програма як і раніше має доступ до відкритих членів базового класу через його об'єкти, але втрачає доступ до цих полів, якщо доступ здійснюється через об'єкти похідного класу.

● за замовчуванням закрите (private). У цьому випадку усі відкриті і захищені поля базового класу стали б закритими членами похідного класу. Звернутися до цих полів прямо тепер неможливо — клас так би мовити “закривається”.

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

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

Конструктори похідних класів. У оголошенні будь-якого конструктора похідного класу потрібно враховувати наступне:

● конструювання об’єкту похідного класу обов’язково відбувається з викликом конструктора базового класу;

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

● для організації виклику потрібної версії конструктора базового класу можна скористатися списком ініціалізації, наприклад:

Student:: Student (char*a, char* b): name (a), group (b) {…}

Starosta:: Starosta (char*a, char* b, int c): Student (a, b), level (c) {…}

 

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

Якщо в похідному класі створена функція з таким самим іменем, що і в базовому, то має місце заміщення методу, у цьому випадку метод похідного класу приховує метод або методи (якщо їх декілька) базового класу.

5.4. Зразок виконання роботи

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

#include " stdafx.h"

#include < iostream>

#include < cstring>

#include < conio.h>

 

using namespace std; // оголошення базового класу

class TwoShape

{

public:

double width;

double height;

void showDim()

{

cout < < " Width and height amount to " < < width < < " and " < < height < < " \n";

}

};

// оголошення похідного класу

class Triangle: public TwoShape

{

public:

char style[20];

double area()

{

return width* height/2;

}

void showStyle()

{

cout < < " This triangle is" < < style < < " \n";

}

};

 

int _tmain(int argc, _TCHAR* argv[])

{

Triangle t1;

Triangle t2;

//всі члени класу Triangle доступні для об'єктів класу

//Triangle, навіть ті, що наслідувані від класу TwoShape

t1.width=4.0;

t1.height =4.0;

strcpy(t1.style, " isosceles"); // рівнобедрений

t2.width=8.0;

t2.height =12.0;

strcpy(t2.style, " right"); // прямокутний

cout < < " Information about triangle t1: \n";

t1.showStyle();

t1.showDim();

cout< < " Triangle area " < < t1.area()< < " \n" < < " \n";

cout < < " Information about triangle t2: \n";

t2.showStyle();

t2.showDim();

cout< < " Triangle area " < < t2.area()< < " \n";

getch();

return 0;

}

 

В даному прикладі клас TwoShape визначає атрибути „узагальненої” двохвимірної фігури (наприклад, квадрата, прямокутника, трикутника тощо). В класі Triangle створюється специфічний тип об’єкта класу TwoShape, в даному випадку трикутник. Клас Triangle містить всі елементи класу TwoShape й, крім того, поле style, функцію area() та функцію showStyle(). У змінній style зберігається опис типу трикутника, функція area() обчислює й повертає його площу, а функція showStyle() відображає дані про тип трикутника.

Звернімо увагу на синтаксис, що використовується в оголошенні класу Triangle, щоб зробити його похідним від класу TwoShape.

class Triangle: public TwoShape {

Оскільки клас Triangle включає всі члени базового класу TwoShape, то він може звертатися до членів width й height всередині методу area(). Крім того, всередині функції main() об’єкти t1 й t2 можуть безпосередньо посилатися на члени width й height так, немов би вони є частиною класу Triangle.

Рис. 1. Вигляд вікна в результаті компіляції програми

Рис. 2. Діаграма класів

5.5. Індивідуальні завдання

Варіант1. Клас “учасник”: прізвище, телефон, адреса.

Похідні: “учасник черги на отримання житла” (дата постановки на облік, наявність пільг, порядковий номер в черзі); “учасник виїзної конференції”(чи потребує поселення, тривалість доповіді, час початку роботи конференції, час початку виступу даного доповідача). В базовому і похідних класах визначити функцію print для друку прізвища для базового або прізвища і категорії учасника – черги чи конференції - для похідних.

В похідних класах перевантажити бінарні операції порівняння (“< “ та “! =“) – за датою поставлення на облік і тривалістю доповіді; унарний “-“ - для зміни пункту про наявність пільги і про потребу в поселенні - на протилежне значення.

Варіант 2. Клас “фігура”: координати на шахівниці, колір. Метод – “хід” на одну позицію в одному з 4 напрямків.

Похідні: ”кінь”, “пішак”(порядковий номер, чи своя половина поля), “ферзь” – зі своїми методами “хід” і “удар”.

В похідних класах перевантажити бінарний мінус А-В як “А б’є В" і операцію [ ] - за порядковим номером – для виведення координат відповідної фігури. Функцію “хід” перетворити на віртуальну.

Варіант 3. Клас “фігура”: координати на шахівниці, колір. Метод – “хід” – в одному з двох напрямків.

Похідні: “шашка” (порядковий номер) і “дамка”, методи -“хід” і “удар”.

В похідних класах перевантажити бінарну функцію А/В як “А б’є В” і оператор перетворення типу (із “шашка” в “дамка”). Функцію “хід” перетворити на віртуальну.

Варіант 4. Клас “прямокутник”: координати верхнього лівого і нижнього правого кутів, порядковий номер.

Похідні: “ромб” (довжина другої діагоналі) і коло (центр – перші дві координати, діаметр – діагональ прямокутника). В базовому і похідних класах визначити функцію draw().

Перевантажити унарні операції - - як зменшення на 1 розміру фігури, бінарну С=А+В – як дублювання в С об’єкта А із збільшенням діагоналі на розмір діагоналі В. Функцію draw() перетворити на віртуальну.

Варіант 5. Клас “нота”: назва, октава, тривалість звучання.

Похідні: “звук”(частота) і “зображення”(координати на екрані лівого верхнього кута фрагменту нотного стану). В обох класах – порядковий номер ноти, визначити функцію output – для кожного класу з різною реалізацією.

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

Варіант 6. Клас “іграшка”: ціна, назва, кількість на складі.

Похідні: “машина”(наявність дистанційного керування, порядковий номер) і “м’яка іграшка”(матеріал, звук). В усіх класах визначити функцію print – для кожного класу з різною реалізацією.

В похідних класах перевантажити операції “++” – як збільшення кількості на складі; “< ” - як порівняння цін. Функцію print перетворити на віртуальну.

Варіант 7. Клас “годинник”: стиль відображення (24 чи 12), години, хвилини, секунди. Метод “плюс секунда” – збільшити поточне значення часу на 1 секунду.

Похідні: “з прямокутним табло”(координати двох протилежних кутів) і “з круглим циферблатом”(координати центру, радіус). В усіх класах визначити функцію draw – для кожного класу з різною реалізацією.

В похідних класах перевантажити операції “++” – для зсуву зображення на 1 позицію; бінарний “+” – для збільшення зображення об’єкта - результату. Функцію draw перетворити на віртуальну.

Варіант 8. Клас “Товар”: назва, порядковий номер, постачальник, ціна, кількість одиниць.

Похідні: “Промисловий товар”(умови транспортування, місце знаходження: на складі, в торговому залі, на вітрині) і “Харчовий продукт”(дата виготовлення, термін зберігання). В усіх класах визначити функцію alarm() – для промислового товару з повідомленням із умов транспортування(“не кантовать”, “осторожно! ”,...), або “товар непридатний для споживання” – для харчового, для базового – просто назва товару.

В похідних класах перевантажити операції “++” – як збільшення кількості одиниць для харчового і зміна місця знаходження для промислового; “< ” – порівняння за терміном зберігання для харчового і за ціною для промислового. Функцію alarm() перетворити на віртуальну.

Варіант 9. Клас “Точка на площині”: координати.

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

В похідних класах перевантажити операції “< ” і “+” бінарні і “-” унарний - у відповідності до їх семантики. Функцію print перетворити на віртуальну.

Варіант 10. Клас “Точка на площині”: координати.

Похідні: “коло”(радіус) і “прямокутник”(координати протилежного кута). В усіх класах визначити функцію move – для руху об’єкта на 1 позицію по x і по y.

В похідних класах перевантажити операції “++” – як збільшення розміру об’єкта на 1, “< ” – за розміром і С=А+В – об’єкт С - “концентричний” відносно А і більший на відповідні розміри об’єкта В. Функцію move перетворити на віртуальну.

Варіант 11. Клас “учасник змагань”: країна, вид спорту, назва учасника.

Похідні: “футбольна команда” (кількість забитих голів, результат, порядковий номер) і “легкоатлет” (час, час лідера, відставання від лідера, місце у фінальній таблиці). В усіх класах визначити функцію print – друк тільки назви учасника або і назви і кількості голів для футбольної команди або часу для легкоатлета.

В похідних класах перевантажити операцію “++” – як збільшення на 1 кількості забитих голів або зменшення на 1 місця в фінальній таблиці; бінарний “-” – як результат конкретної гри: “нічия”, “перемога” або “поразка” в полях “результат”. Для об’єктів легкоатлет А-В щось виконує тільки для ситуації, коли А стає новим лідером, тобто його час менший, ніж час лідера, тоді необхідно змінити відповідні значення для обох об’єктів. Функцію print перетворити на віртуальну.

Варіант 12. Клас “довге число”: кількість знаків, основа системи числення.

Похідний: “дріб”(кількість знаків у дробовій частині). Добавити поле – максимальна кількість знаків, в обох класах визначити функцію view – для кожного класу з різною реалізацією і функцію для переведення в десяткову систему числення.

В обох класах перевантажити бінарні операції “+”, “-“ і “< ” і унарний “-” – у відповідності до звичної семантики цих операцій і незалежно від різниць в системах числення агентів. Функцію view перетворити на віртуальну.

Варіант 13. Клас “Станція”: координати, назва.

Похідні: “Радіостанція” (досяжність, вартість ефірного часу, діапазон частот, порядковий номер),.“залізнична станція” (кількість запасних шляхів, тривалість зупинки швидкісних потягів, категорія, порядковий номер), визначити функцію view – для кожного класу з різною реалізацією (назва і категорія).

В обох класах перевантажити бінарну операцію “+”: результуючий об’єкт для радіостанцій має сумарну досяжність, мінімальну вартість ефірного часу і об’єднання діапазону частот, для залізничних – сумарну кількість запасних шляхів, максимальну категорію і максимальну тривалість зупинки. Унарна “++” – збільшення відповідно вартості ефірного часу і кількості запасних шляхів. Функцію view перетворити на віртуальну.

Варіант 14. Клас “ істота ”: координати, вік, назва. Метод move – збільшення координат на 1.

Утворити ієрархію: “форма існування” – абстрактний клас з чисто віртуальним методом move. Похідні від нього: “істота”, “рослина” (координати), “нерухомий об’єкт”(координати, назва), похідні від істоти: “хижак” (максимальний вік істот цього класу) і “здобич” (максимальний вік істот цього класу).Визначити функцію move– для істот збільшення координат, збільшення віку на 1 і якщо вік > за максимальний, то знищення даного об’єкту.

Бінарна операція А-В допустима тільки для об’єктів, які знаходяться поруч (у 8 напрямках) і тільки якщо А – хижак, а В – здобич, або А – здобич, а В - рослина, тоді об’єкт В знищується, а об’єкт А пересувається на одну позицію і його вік збільшується на 1. Функцію move перетворити на віртуальну.

Варіант 15. Клас “кліматичні умови”: температура. освітленість. вологість, кислотність гранта.

Похідні: “кліматичні умови в теплиці”(оптимальні кліматичні умови, допуски), “кліматичні умови на городі” (критичний рівень вологості, критичні рівні кислотності), визначити функцію show – для базового – поточний стан, для похідних – виводити тільки ті значення, які перевищують критичні, і величину цього перевищення.

В обох класах перевантажити бінарну операцію “= =”, якщо всі параметри обох об’єктів лежать в межах допустимих, або якщо для обох об’єктів є хоч один параметр, що знаходиться за цими межами і унарну - префіксний “++” для збільшення рівня вологості на 1. Функцію show перетворити на віртуальну.

Варіант 16. Клас “давач”: поточне значення, максимально і мінімально допустимі, тип (t, p, i, pH), сигнал тривоги.

Похідні: “круглий дисплей”(x, y, R), “прямокутний дисплей”(координати протилежних кутів), визначити для базового класу масив максимальних значень за добу для кожного типу. Функція view – поточне і максимальне за добу в залежності від типу - для кожного класу з різною реалізацією і функцію set_current_value, яка має змінювати і поточне значення і, в разі необхідності, максимальне за добу.

В обох класах перевантажити бінарну операцію “> ” за поточними значеннями, якщо давачи одного типу, і унарну “++” – як R++ і x2++, y2++ відповідно. Функцію view перетворити на віртуальну.

Варіант 17. Клас “товар на складі”: назва, кількість, місце розташування).

Похідні: “продукт з малим терміном зберігання”(оптимальна температура, дата поставки, термін зберігання), “хімічний елемент”(оптимальна температура. оптимальна вологість, допуски по температурі і вологості), визначити функцію attention – для кожного класу з різною реалізацією.

В обох класах перевантажити бінарну операцію “< ” за датою поставки і за амплітудою критичних температур, і унарну “++” – збільшення кількості товарів відповідного класу. Функцію attention перетворити на віртуальну.

Варіант 18. Клас “фраза”: (кількість слів, кількість символів, кількість різних символів.

Похідні: “число”(система числення, довжина дробової частини, форма запису(з фіксованою, з плаваючою крапкою), “речення”(кількість символів в алфавіті, чи ігнорувати регістр), визначити функцію view – виведення самої фрази, або разом із значенням основи системи числення, або разом із кількістю символів в алфавіті.

В обох класах перевантажити бінарні операції “= =” – порівняння відповідно до семантики, “& “ – порозрядне для війкового запису чисел або як по символьний перетин для речень з врахуванням місця розташування символів. Функцію view перетворити на віртуальну.

Варіант 19. Клас “Число”: кількість цифр, основа системи числення.

Похідні: “ціле”(наявність знакового розряду), “дійсне”(наявність знакового розряду, довжина дробової частини, форма представлення (static)), визначити функцію print – для кожного класу з різною реалізацією: просто значення або з вказуванням типу.

В обох класах перевантажити бінарну операцію “/”, у відповідності до звичної семантики і унарну “-” – зміна факту наявності знакового розряду. Реалізувати







Дата добавления: 2014-11-10; просмотров: 3165. Нарушение авторских прав; Мы поможем в написании вашей работы!



Картограммы и картодиаграммы Картограммы и картодиаграммы применяются для изображения географической характеристики изучаемых явлений...

Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...

Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

Именные части речи, их общие и отличительные признаки Именные части речи в русском языке — это имя существительное, имя прилагательное, имя числительное, местоимение...

Интуитивное мышление Мышление — это пси­хический процесс, обеспечивающий познание сущности предме­тов и явлений и самого субъекта...

Объект, субъект, предмет, цели и задачи управления персоналом Социальная система организации делится на две основные подсистемы: управляющую и управляемую...

Дизартрии у детей Выделение клинических форм дизартрии у детей является в большой степени условным, так как у них крайне редко бывают локальные поражения мозга, с которыми связаны четко определенные синдромы двигательных нарушений...

Педагогическая структура процесса социализации Характеризуя социализацию как педагогический процессе, следует рассмотреть ее основные компоненты: цель, содержание, средства, функции субъекта и объекта...

Типовые ситуационные задачи. Задача 1. Больной К., 38 лет, шахтер по профессии, во время планового медицинского осмотра предъявил жалобы на появление одышки при значительной физической   Задача 1. Больной К., 38 лет, шахтер по профессии, во время планового медицинского осмотра предъявил жалобы на появление одышки при значительной физической нагрузке. Из медицинской книжки установлено, что он страдает врожденным пороком сердца....

Studopedia.info - Студопедия - 2014-2024 год . (0.013 сек.) русская версия | украинская версия