Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
индивидуальные задачи по ООСТ.doc
Скачиваний:
2
Добавлен:
24.11.2019
Размер:
184.83 Кб
Скачать

Тема 4. Спадкування

4.1. Додайте відсутні конструктори в дану програму:

class base {

int i, j;

public:

// потрібен конструктор

void showij();};

class derived: public base {

int k;

public:

// потрібен конструктор

void show(); };

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

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

class coord {

public:

Int X, y; // значення координат

coord ();

coord (int i, int j);

void get_xy(int &i, int &j);

coord operator+ (coord ob2) ;

coord operator– (coord ob2) ;

coord operator=( coord ob2) ;

};

4.4. Створіть відповідні конструктори саг() і truck(). Вони повинні передавати необхідні аргументи об'єктам класу vehicle. Крім цього конструктор саг() повинен при створенні об'єкта присвоювати начальне значення змінній passengers, а конструктор truck() - змінній loadlimit.

// Базовий клас автомобілів для різних типів

class vehicle {

int num_wheels;

int range;

public:

vehicle (int w, int r){num_wheels = w; range = r;}

void showv ( );};

class car: public vehicle {

int passengers;

public :

// вставте тут конструктор саг()

void show();

};

class truck: public vehicle {

int loadlimit;

public:

// вставте тут конструктор truck ()

void show ( );

};

Об'єкти повинні оголошуватися таким чином:

car ob (passengers, wheels, range);

truck ob(loadlimit, wheels, range);

4.5. Нехай базовий клас оголошується наступним чином:

class area_cl {

public:

double height;

double width;};

Створіть три похідні класу rectangle, isosceles і cylinder, які успадковують базовий клас агеа_c1. Кожний клас повинен містити в собі функцію area(), що повертає площу відповідно прямокутника (rectangle), рівнобедреного трикутника (isosceles) і площа поверхні циліндра (cylinder). Площа поверхні циліндра обчислюється по наступній формулі 2 * pi * R2 +2*pi * R * Н. Для ініціалізації змінних height і width використайте конструктор з параметрами.

4.6. Створіть вихідний базовий клас building для зберігання числа поверхів і кімнат у будинку, а також загальну площу кімнат. Створіть похідний клас house, що успадковує клас building і зберігає число ванних кімнат і число спалень. Крім цього створіть похідний клас office, що успадковує клас building і зберігає число вогнегасників і телефонів.

4.7. Використовуючи наступну ієрархію класів, створіть конструктор класу З так, щоб він присвоював начальне значення змінній k і передавав аргументи конструкторам А() і В().

class A {

int i;

public:

A(int a);};

class В {

int j;

public:

В (int a) { j = a; }};

class C: public A, public В {

int k;

public:

/* Створіть такий конструктор C(), щоб він присвоював начальне значення змінній k і передавав аргументи конструкторам А() і В() */

};

4.8-4.12. Нехай абстрактний базовий клас визначається такий чином:

abstract class IntArray {

public:

// конструктори

explicit IntArray (int sz = DefaultArraySize);

IntArray (int *array, int array_size);

IntArray (const IntArray &rhs);

// віртуальний деструктор

virtual ~IntArray() ;

virtual int& operator[](int index);//4.8

virtual void sort();//4.9

virtual int min() const;//4.10

virtual int max() const;//4.11

virtual int find (int value) const//4.12;

protected:

static const int DefaultArraySize = 12;

void init (int sz; int *array);

int _size;

int *ia;};

Створіть похідний клас, доопределите віртуальні функції, що відповідають своєму варіанту, і всі інші невідмічені функції.

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

(4.13) Крапка

(4.14) Службовець

(4.15) Фігура

(4.16) Телефонний_номер

(4.17) Рахунок_в_банку

(4.18) Овочі

(4.19) Транспортний засіб

4.20-4.25. Визначте клас X, елементом якого є об'єкт класу Y. В обох класах Визначте конструктори й деструктори. У програмі продемонструйте створення об'єктів обох класів.

(4.20) X(шахи) Y(шахове поле)

(4.21) X(машина) Y(радіо)

(4.22) X(квартира) Y(кімната)

(4.23) X(бібліотека) Y(книга)

(4.24) X(університет) Y(факультет)

(4.25) X(комп'ютер) Y(процесор)

Для класу X перевантажте оператор перетворення об'єкта в рядок.