Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Ship, CruiseShip, and CargoShip Classes

Поиск

Design a Ship class that has the following members:

* A member variable for the name of the ship (a string)

* A member variable for the year that the ship was built (a string)

* A constructor and appropriate accessors and mutators

* A print function that displays the ship s name and the year it was built.

Design a CruiseShip class that is derived from the Ship class. The CruiseShip class

should have the following members:

* A member variable for the maximum number of passengers (an int)

* A constructor and appropriate accessors and mutators

* A print function that overrides the print function in the base class. The

CruiseShip class has print function should display only the ship s name and the

maximum number of passengers.

Design a CargoShip class that is derived from the Ship class. The CargoShip class

should have the following members:

* A member variable for the cargo capacity in tonnage (an int).

* A constructor and appropriate accessors and mutators.

* A print function that overrides the print function in the base class. The

CargoShip class s print function should display only the ship s name and the

ship s cargo capacity.

 

Додаткове завдання 2.

Визначити класи "Swordsman" (Мечник), "Archer" (Лучник) і "Mage" (Маг), кожен з яких є екземпляром базового класу "Unit" (штука, елемент) в комп'ютерній грі, і може атакувати, ухилятись від атак і вмирати.

У мечника 15 хіт-поінтів (життів), пошкодження при атаці 5, шанс ухилятись 60%.

Лучник: 12 hp, 4 dmg, 40% dodge

Маг: 8 hp, 10 dmg, 30% dodge

 

В main() створити два масива (ворогуючі сторони) по три юніта в кожному, причому тип юніта (мечник, лучник чи маг) має задаватись випадково, при заповненні цих масивів. Тобто один раз запустивши програму, може створитись три лучники проти мечника і двох магів, іншого - лучник, мечник і маг проти двох мечників і лучника і т.д.

 

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

 

В кінці бою оголосити, яка команда перемогла (перша/друга, синя/червона чи ін.)

 

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

Тема: Успадкування. Множинне успадкування. Виклик конструкторів та деструкторів. Віртуальні базові класи.

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

1. Синтаксис множинного успадкування.

2. Порядок виклику конструкторів при множинному успадкуванні.

3. Недоліки множинного успадкування. Способи усунення.

4. Віртуальний базовий клас. Мета та синтаксис використання.

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

6. Знайдіть помилки у визначення класу.

class Three: public Two: public One

{

protected:

int x;

public:

Three(int a, int b, int c), Two(b), Three(c)

{ x = a; }

~Three();};

 

7. Нехай визначено клас

class Tiger: public Felis, public Carnivor{

public:

Tiger(int x, int y): Carnivore(x), Felis(y) {….}

};

Який з конструкторів буде викликаний першим Carnivore чи Felis?

Завдання 1.

Варіанти:

1. За допомогою множинного успадкування визначити клас Коло, вписане у Квадрат. Класи Коло та Квадрат повинні мати методи для обчислення площі та виводу інформації про фігури. Клас Коло повинен містити метод для обчислення довжини кола,клас Квадрат – для обчислення периметра квадрата.

2. За допомогою множинного успадкування визначити клас Квадрат, вписаний у Коло. Класи Коло та Квадрат повинні мати методи для обчислення площі та виводу інформації про фігури. Клас Коло повинен містити метод для обчислення довжини кола,клас Квадрат – для обчислення периметра квадрата.

3. За допомогою множинного успадкування визначити клас Прямокутник, вписаний у Коло. Класи Коло та Прямокутник повинні мати методи для обчислення площі та виводу інформації про фігури. Клас Коло повинен містити метод для обчислення довжини кола,клас Прямокутник – для обчислення периметра прямокутника.

4. За допомогою множинного успадкування визначити клас Прямокутний трикутник, вписаний у Коло. Класи Коло та Прямокутний трикутник повинні мати методи для обчислення площі та виводу інформації про фігури. Клас Коло повинен містити метод для обчислення довжини кола, клас Прямокутний трикутник – для обчислення периметра прямокутника.

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

6. За допомогою множинного успадкування визначити клас Рядок у позиції екрану. Клас повинен містити метод виводу рядка на екран у заданій позиції. Клас Координати повинен містити метод встановлення курсора у потрібну позицію.

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

8. За допомогою множинного успадкування визначити клас Коло, вписане у Ромб. Класи Коло та Ромб повинні мати методи для обчислення площі та виводу інформації про фігури. Клас Коло повинен містити метод для обчислення довжини кола..

 

Завдання 2. Визначити необхідну ієрархію класів, використовуючи множинне успадкування. Продумати тип наслідування. Продемонструвати різні способи усунення недоліків при множинному спадкуванні.

Варіанти:

1. Студент, Працівник -> Студент-Заочник.

2. Студент, Актор ->учасник КВН.

3. Викладач, Співак -> Викладач вокалу.

4. Танцівник, Офіціант -> Танцюючий офіціант.

5. Машина, Корабель -> Амфібія.

6. Викладач, Адміністратор -> Завідувач кафедри.

7. Спортсмен, Викладач -> Тренер.

8. Транспортний засіб, Тягач -> Трактор.

9. Повітряний транспортний засіб, Двигун -> Дирижабль.

10. Транспортний засіб, Двигун -> Мотоцикл.

11. Залізна дорога, Місто -> Метрополітен

12. Літак, Ракета -> Реактивний літак

13. Кінь, Птах -> Пегас.

 

Додаткове завдання 3.

Описати клас "Fortress" (Фортеця).

Для початку, напишіть клас "Shooter" (стрілець), який буде містити два поля: назва аммуніції та її кількість. Він може виконати дію "постріл" і витратити для цього одиницю амуніції, повідомляючи в консоль, як вона називалась. А також може здійснити дію "дати амуніцію", яка встановлюватиме назву і кількість амуніції, отримуючі ці дані через параметри.

Стрілець має три дочірні класи: "Archer" (Лучник), "Ranger" (Рейнджер) та "Catapult" (Катапульта), які заміщають дію "постріл", доповнюючи повідомлення в консоль інформацією про те, хто саме з них вистрілив. Перші два повинні стріляти стрілами, а катапульта - каменями.

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

Від класів "стрілкова вежа" і "катапульта" має походити клас "Fortress". Лише в її конструкторі мають поставлятись стріли для стрілкової вежі і камені для катапульти. Додайте до фортеці ще кілька полів - товщина стін, стан воріт у відсотках, і т.д. - по вашому бажанню та фантазії.

Більше ніяких допоміжних методів чи об'єктів створювати не потрібно. В кожного з полів чи методів у цій ієрархії має бути встановлений максимальний рівень захисту, і успадкування має відбуватись по найвищо-допустимому по захисту специфікаторові доступу. Але таким, щоб в main() можна було виконати наступне:

створити об'єкт фортеці

вистрілити тричі лучником, двічі рейнджером і раз з катапульти

Отже, всього має бути 6 класів, фінальним серед них є клас "Фортеця", лише один об'єкт якої буде створено. Зверніть на це увагу - 6 класів описано, всі використовуються. Але об'єкт у всій програмі один.

ПРИМІТКИ! Коли створюватиметься фортеця, доставте в стрілкову вежу лише 4 стріли, тоді буде явно видно, що на другий постріл рейнджеру стріл не вистачить, оскільки лучник перед тим витратив 3 із 4-х стріл.

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



Поделиться:


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

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