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. Создать очередь и дек с использованием наследования классов. Организовать работу с элементами списка.