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

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

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

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

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

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

от 25%

Подписываем

договор

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

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

Лабораторная работа №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. тема Общество 1
6. тема может быть предложена и студентом но обязательно должна быть согласована с преподавателем
7. Столица ~ Катманду
8. варианта комплектной трансформаторной подстанции
9. UNIPHRM firm фирма УНИФАРМ КОРОЛЬ ПРУССИИ
10. ДОНСКОЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ДГТУ Кафедра Экономика и менеджмент в машиностро