Будь умным!


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

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

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

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 6.11.2024

Лабораторная работа №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. конференции посвященной открытию в Москве первой Летней киноакадемии Н
2. яких розрізів економічної діяльності підприємства в тому числі й різних ділянок бухгалтерського обліку
3. корреспондент РАМН доктор медицинских наук профессор Богомильский М
4. Проектирование формующей оснастки
5. а Это причины всех неприятностей- разные события явления люди и организации которые влияют на производ
6. Статья 1. Основные понятия используемые в настоящем Законе СанктПетербурга Для целей настоящего Закона
7. Оценка и анализ структуры системы защиты информации
8. Дискриминация гипотез по кинетическим экспериментам
9. Основы конституционного статуса Президента РФ, его положение в системе высших органов государственной власти
10.  Установите соответствие между методом научного познания и примером его использования- 1 моделирование
11. точке первой доли кисть руки была на одном уровне с локтем ; вторая доля имеет направление в сторону от
12. тематические модели
13. Право власності на землю в Запорозьській Січі
14. Проектирование двухэтажного жилого дома с поперечными несущими стенами габаритными размерами в осях 12000 8800 мм и подвалом
15. Тема- Послеродовые гнойносептические заболевания.
16. Одним из требований предъявляемых к общеобразовательным учреждениям является поиск выявление обучение и
17. КОНТРОЛЬНАЯ РАБОТА по английскому языку студента 1 курса заочной формы обучения филологического факуль
18. 4 Місто Жовті Води Місто Жовті Води є містом обласного підпорядкування
19. практикум -психологическая игра ОСТРОВ БУЯН Мастер класс Колыбельные
20. Мировые религии Буддизм