Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
О.О.П / Лабораторні роботи / 17_наследование.doc
Скачиваний:
8
Добавлен:
30.05.2020
Размер:
71.68 Кб
Скачать

Void Teach::about(void)

{ Student::about();

gotoxy(10,10);printf("Преподаваемый предмет : %s",subject);

}

//----------------основная программа------------------------

Void main()

{

Student *stud;

Teach *teacher;

clrscr();

gotoxy(26,1);

cprintf("Студент :");

stud = new Student("Петров Петр Петрович",17,"муж.");

stud ->about();

delete stud;

gotoxy(25,24);

cprintf("Нажмите же что-нибудь !");

getch();

clrscr();

gotoxy(25,1);

cprintf("Преподаватель :");

teacher = new Teach("Василий Иванович Чапаев",45," муж.","плавание");

teacher ->about();

delete teacher;

gotoxy(25,24);

cprintf("Нажмите ЛЮБУЮ клавишу для выхода");

getch();

}

Наследование позволяет передавать все определяемые пользователем свойства класса нескольким классам, наследующим данный класс. Проиллюстрируем передачу режима доступа к переменным при наследовании типа X–>Y–>z .

#include<iostream.h>

class X

{

protected:

int i;

int j;

public:

void get_f(void);

void put_f(void);

};

class Y: public X // i, j класса Х стали protected членами в классе Y

{ int m;

public:

int get_m(void);

void make_m(void);

};

class Z: public Y // Z имеет доступ к переменным i, j класса Х

{ public: // Z не имеет доступа к m класса Y

void d(void);

};

void X:: get_f(void)

{ cout << "Введите два числа:" << "\n";

cin>>i>>j;}

void X::put_f(void)

{ cout << "i=" << i << "j=" << j << "\n";}

int Y::get_m(void)

{ return m;}

void Y::make_m(void)

{ m = i*j; }

void Z::d(void)

{ i = 5; j = 4;}

void main()

{

Y a;

Z b;

a.get_f();

a.put_f();

a.make_m();

cout << a.get_m() << "\n";

b.d();

b.put_f();

b.make_m();

cout << b.get_m() << "\n";

}

Если мы заменим режим доступа при наследовании класса Х на private, то функция void Z::d(void) не будет иметь право доступа к переменным i, j.

Если же мы заменим режим доступа при наследовании класса Z на private, не изменяя режим доступа при наследовании класса Х, то действие примера по сравнению с начальным не изменится.

Базовые классы создаются в том порядке, в котором они перечислены в списке базовых классов при объявлении производного класса Z.

Использование конструкторов при наследовании имеет свои особенности. Пока конструкторы базового классов не имеют аргументов, то производный класс может не иметь функцию-конструктор. Если же конструктор базового класса имеет один или несколько аргументов, каждый производный класс обязан иметь конструктор. Чтобы передать аргументы в базовый класс, нужно оп­ределить их после объявления конструктора базового класса.

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

Задания к лабораторной работе 17

1. Создать класс-родитель «точка», его наследника – класс «окружность», и наследника окружности «окружность с текстом внутри» (нарисовать, стереть, передвинуть, изменить радиус).

2. Создать класс-родитель «точка», его наследника – класс «отрезок», наследника выпуклого отрезка «четырехугольник» (нарисовать, стереть, закрасить, передвинуть, повернуть).

3. Создать класс-родитель «точка», его наследника – класс «отрезок», наследников отрезка «квадрат», «параллелограмм» (нарисовать, стереть, закрасить, передвинуть, повернуть).

4. Создать класс «меню» и его наследников – горизонтальное, вертикальное, иерархическое (добавить пункт, нарисовать).

5. Создать класс «студент» и его класс-наследник «группа студентов» (вывести, изменить, отсортировать информацию).

6. Создать класс-родитель «телефон» и его класс-наследник «адрес» (вывести, изменить).

7. Создать класс-родитель «спортсмен» и класс-наследник «команда спортсме-нов» (вывести отдельно Ф.И.О., вид спорта, возраст, вес; изменить информацию).

8. Создать класс-родитель «точка», его наследника – класс «отрезок», наслед-ников отрезка – «ромб», «треугольник» (нарисовать, стереть, закрасить, повернуть).

9. Создать класс-родитель «строка» и класс-родитель «окно»; из этих двух классов получить окно со строкой (вывести на экран, изменить строку, размеры окна).

10. Создать класс-родитель «ученик», класс-наследник «ученик и его оценки» (по некоторым предметам), и класс-наследник «журнал».

11. Организовать программу осуществляющую иерархию порождения одного клас­са из базового, по типу «компьютер», → «периферийное устройство», → «кла­виатура».

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

13. Разработать программу осуществляющую иерархию порождения нескольких классов из базового, по типу «устройство», → «монитор», → «клавиатура», → «мышь».

14. Имеется base class(A), в котором одна из функций принимает числа из входного потока, создать derive class(B), в котором одна из функций распечатывает их по возрастанию, а другая найдет их сумму.

15. Разработать программу «картотека», с использованием наследования от одного базового класса. Имеется класс «книга», породить классы «данные авто­ра», «индекс книги» и организовать доступ между классами.

16. Создать класс-родитель «вектор» и класс-наследник «векторная фигура» (на­рисовать, стереть, закрасить, передвинуть, повернуть).

17. Создать класс-родитель «бинарное дерево» и его класс-наследник «n-арное дерево». Предусмотреть запись новых элементов и вывод деревьев на экран.

18. Создать класс-родитель «однонаправленный список» и его класс-наслед­ник «двунаправленный список». Создать функции добавления новых элементов и вывода на экран всех элементов списка с адресами предыдущего и последующего элементов (для двунаправленного списка).

19. Создать класс-родитель «стек» и класс-наследник «дек». Предусмо­треть функцию добавления элементов и функцию вывода на экран элементов.

20. Создать очередь и дек с использованием наследования классов. Организовать работу с элементами списка.