Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Лабораторная работа ’15.html

Работа добавлена на сайт samzan.net:


Лабораторная работа №15.

Тема: Использование свойства полиморфизма и исследование механизма виртуальных функций.

Цель: Научиться переопределять виртуальные методы в производных классах.

Оснащение: IBM PC, Borland C++ 5.02

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

Пример объявления виртуального метода:

virtual int TestMethod()

{

 doSomething(); //Что-то сделать

 return 0;

}

Чисто виртуальным методом называется метод, реализация которого возможна ТОЛЬКО в производных классах.

Пример объявления чисто виртуального метода:

virtual int TestMethod() = 0;

Класс, содержащий хотя бы один чисто виртуальный метод, называется абстрактным. Абстрактные классы предназначены для представления общих понятий, которые предполагается конкретизировать в производных классах. Абстрактный класс может использоваться только в качестве базового для других классов — объекты абстрактного класса создавать нельзя, поскольку прямой или косвенный вызов чисто виртуального метода приводит к ошибке при выполнении.

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

Например, в случае следующей иерархии классов:

где Itemабстрактный класс, описывающий предмет в библиотеке, Bookпроизводный класс, описывает книгу, Magazineпроизводный класс, описывает журнал, следующий фрагмент кода является компилируемым:

Item *item1 = new Book();

Item *item2 = new Magazine();

item2->Show();

item3->Show();

Здесь обявляется 2 указателя на абстрактный класс, которые ссылаются на обекты классов Book и Magazine. Метод Show() вызывается косвенно для каждого обекта в терминах базового класса, но работает по-разному, в зависимости от реализации в классах Book и Magazine. Например, для класса Book метод Show() может выводить информацию об авторе книги и коде издания, для класса Magazine() – информацию о номере журнала и издательстве.

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

Конструкторы не наследуются, но существует возможность вызывать в производных классах конструкторы базовых. Пример конструктора базового класса Item:

Item(int _invN, string _name)

{

 this->invN  = _invN; //инициализация инв номера

 this->name = _name; //инициализация имени

this->taken = false; //предмет изначально не взят

}

Пример конструктора класса Book с четырьмя параметрами с вызовом базового конструктора:

Book(int _invN, string _name, string _author, int _year) : Item(_invN, _name)

{

this->author = _author;  //инициализация автора

this->year = _year;  //инициализация года

}

Часть строки «:Item(_invN) » означает, что вызывается конструктор

Item(int, string) базового класса, который инициализирует инвентарный номер и название объекта. Поскольку в базовом классе существует конструктор, инициализирующий инвентарный номер и название предмета, реализовывать то же самое в производных классах нет нужды, достаточно лишь вызвать конструктор базового класса.

Класс-потомок может вызывать методы базового класса, например метод Input класса Book() вызывает Input() із базового класса:

virtual void Input()

{

Item::Input(); // ввод инв номера и названия

 cout<<”Введите автора”;

cin>>author;

}

Задание:

Создать абстрактный базовый класс Item (предмет в библиотеке), который содержит следующие защищённые поля (protected):

• поле «инвентарный номер предмета»;

• переменную-состояние «взят-невзят»;

• строку «имя»;

защищенные конструкторы:

• по умолчанию;

• с параметрами, задающий инвентарный номер и имя предмета;

открытые методы:

чисто виртуальный метод Show() (вывод информации на экран);

• виртуальный метод Input() для ввода инвентарного номера и названия;

• метод Take() (взять предмет), устанавливающий состояние «взят»;

• метод Return() (вернуть предмет), устанавливающий состояние «не взят».

Создать производные классы Book, Magazine, в которых переопределить метод Show.

Класс Book содержит следующие закрытые поля:

• поле «автор»;

• поле «год издания»;

открытые конструкторы:

• конструктор по умолчанию,

• конструктор с параметром, принимающий 4 аргумента и инициализирующий поля «инв. номер», «название», «автор», «год издания», и вызывающий нужный конструктор базового класса;

открытые методы:

• метод Input() для ввода данных, ввод инвентарного номера и названия осуществляется путём вызова Input из базового класса

Класс Magazine содержит следующие закрытые поля:

• поле «издательство»;

• поле «номер издания»;

открытые конструкторы:

• конструктор по умолчанию,

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

открытые методы:

• метод Input() для ввода данных, ввод инвентарного номера и названия осуществляется путём вызова Input из базового класса

В программе описать функцию Show_Info, которая выводит инвентарный номер объекта, информацию об объекте, а так же его статус «взят-невзят» используя интерфейс абстрактного класса Item.

Создать массив предметов,  создавать объекты с использованием меню, в зависимости от введённого значения (например, 1 – книга, 2 – журнал, 0 – закончить создавать объекты). Вывести информацию обо всех объектах, используя виртуальный метод Show().


Item

ook

Magazine




1. Методичні рекомендації до самостійної підготовки студентів спеціальності 51
2. Про міський електричний транспорт та підпункту 4
3. Потребительский выбор
4. Тема Розв~язування вправ на всі дії з натуральними числами Мета
5. Дифференциальные уравнения движения точки. Решение задач динамики точки
6. Планирование расследования многоэпизодных уголовных дел
7. Лао Цзы Дао дэ Цзин
8. Утверждаю2
9. Курсовая работа- Демографическое развитие в мире и в России
10. Учет производственных материальных запасов на складе
11. Расширяющаяся Вселенная
12. Иванов АИ Технические измерения
13. Государственное регулирование природоохранной деятельност
14. Идиот и Бесы ~ романы Ф
15. введение индивидуальных и гибких графиков работы; сокращение круга лиц привлекаемых к сверхурочной работе;
16.  на здобуття наукового ступеня кандидата юридичних наук за спеціальністю 12
17. ЭКОНОМИЧЕСКИЕ ПОКАЗАТЕЛИ УЧАСТКА ПЕРВИЧНОЙ СЕТИ1
18. организационнопедагогические технологии определяющие структуру воспитательнообразовательного процесс
19. ПЕТЕРБУРГА ОТДЕЛ ОБРАЗОВАНИЯ АДМИНИСТРАЦИИ ПЕТРОГРАДСКОГО РАЙОНА САНКТПЕТЕРБУРГА Государственное общ
20. реферат дисертації на здобуття наукового ступеня доктора біологічних наук Львів ~ Дисерт