Лабораторная работа № 5. Наследование классов, механизм виртуальных функций - Технология разработки программного обеспечения систем управления
Цель Работы - изучить одну из базовых концепций ООП, наследование классов в С++, заключающуюся в построении цепочек классов, связанных иерархически, познакомиться с механизмом виртуальных функций.
- Теоретические сведения
Наследование - механизм создания производного класса из базового, т. е. к существующему классу можно что-либо добавить или изменять его каким-либо образом для создания нового (производного) класса. Это мощный механизм для повторного использования кода. Наследование позволяет создавать иерархию связанных типов, совместно использующих код и интерфейс. Модификатор прав доступа используется для изменения доступа к наследуемым объектам в соответствии с правилами, указанными в таблице 1.
Таблица 1 - Доступ в классах при наследовании
Доступ в базовом классе |
Модификатор прав доступа |
Доступ в производном классе |
Private |
Private |
Не доступны |
Private |
Public |
Не доступны |
Protected |
Private |
Private |
Protected |
Public |
Protected |
Public |
Private |
Private |
Public |
Public |
Public |
Ограничение на наследование
При определении производного класса не наследуются из базового:
- 1) конструкторы; 2) деструкторы; 3) операторы new, определенные пользователем; 4) операторы присвоения, определенные пользователем; 5) отношения дружественности.
Использование косвенной адресации с установкой указателей на базовый класс. Механизм косвенной адресации рассмотрим на примере:
Class B
{
Public:
Int x;
B() { // Конструктор по умолчанию
X = 4; }
};
Class D : public B
{
// Производный класс
Public:
Int y;
D()
{// Конструктор по умолчанию
Y = 5; }
};
Void main(void) {
D d;// Конструктор класса D создает объект d
B *p; // Указатель установлен на базовый касс
P = &d;// Указатель p инициализируется адресом d
// косвенное обращение к объектам базового и производного классов
// "считываем их текущее состояние в переменные
Int i = p -> x; // Базовый класс виден напрямую
Int j = ( ( D* ) p )p -> y;// Прямое преобразование указателя на D
// через переменные печатаем их текущее состояние
Cout << " x_i= " << i << endl;
Cout << " y_j= " << j << endl;
Getch();
}
Виртуальная Функция И Механизм Позднего Связывания
Виртуальная функция объявляется в базовом или в производном классе и затем переопределяется в наследуемых классах. Совокупность классов (подклассов), в которых определяется и переопределяется виртуальная функция, называется полиморфическим кластером, ассоциированным с некоторой виртуальной функцией. В пределах полиморфического кластера сообщение связывается с конкретной виртуальной функцией-методом во время выполнения программы.
Обычную функцию-метод можно переопределить в наследуемых классах. Однако без атрибута virtual такая функция-метод будет связана с сообщением на этапе компиляции. Атрибут virtual гарантирует позднее связывание в пределах полиморфического кластера.
Часто возникает необходимость передачи сообщений объектам, принадлежащим разным классам в иерархии. В этом случае требуется реализация механизма позднего связывания. Чтобы добиться позднего связывания для объекта, его нужно объявить как указатель или ссылку на объект соответствующего класса. Для открытых производных классов указатели и ссылки на объекты этих классов совместимы с указателями и ссылками на объекты базового класса (т. е. к объекту производного класса можно обращаться, как будто это объект базового класса). Выбранная функция-метод зависит от класса, на объект которого указывается, но не от типа указателя.
С++ поддерживает virtual функции-методы, которые объявлены в основном классе и переопределены в порожденном классе. Иерархия классов, определенная общим наследованием, создает связанный набор типов пользователя, на которые можно ссылаться с помощью указателя базового класса. При обращении к виртуальной функции через этот указатель в С++ выбирается соответствующее функциональное определение во время выполнения. Объект, на который указывается, должен содержать в себе информацию о типе, поскольку различие между ними может быть создано динамически. Эта особенность типична для ООП - кода. Каждый объект "знает" как на него должны воздействовать. Эта форма полиморфизма называется чистым полиморфизмом.
В С++ функции-методы класса с различным числом и типом параметров есть действительно различные функции, даже если они имеют одно и то же имя. Виртуальные функции позволяют переопределять в управляемом классе функции, введенные в базовом классе, даже если число и тип аргументов те же самые. Для виртуальных функций нельзя переопределять тип функции. Если две функции с одинаковым именем будут иметь различные аргументы, С++ будет считать их различными и проигнорирует механизм виртуальных функций. Виртуальная функция - обязательно метод класса.
- Задание К Лабораторной Работе
Общая постановка. Программа должна содержать:
- - базовый класс Х, включающий два элемента х1, х2 типа int, - конструктор с параметрами для создания объектов в динамической области памяти,
Деструктор,
- виртуальные методы просмотра текущего состояния и переустановки объектов базового класса в новое состояние.
- - производный класс У, включающий один элемент у типа int; - конструктор с параметрами и списком инициализаторов, передающий данные конструктору базового класса, - переопределенные методы просмотра текущего состояния объектов и их переустановки в новое состояние. - Варианты заданий
Создать в производном классе метод Run, определяющий:
Сумму переменных классов.
Произведение переменных классов.
Сумму квадратов переменных классов.
Значение х1+х2 - у.
Значение (х1+х2)/у.
Значение (х1+х2)*у.
Значение х1*у+х2.
Значение х1+х2*у.
Произведение квадратов переменных класса.
Значение х1*х2+у.
Значение х1*х2/у.
Значение х1*х2-у.
Значение (x1-x2)*y.
Значение (x1-x2)/y.
- - Контрольные вопросы 1. Что такое наследование, одиночное наследование, множественное наследование? 2. Какие объекты базового класса наследуются в производном, а какие - нет? 3. На примере своей программы поясните механизм позднего связывания. 4. В каком случае С++ проигнорирует механизм виртуальных функций?
Похожие статьи
-
Цель Работы - изучить приемы создания и использования шаблонов классов. - Теоретические сведения Достаточно часто встречаются классы, объекты которых...
-
Цель Работы - изучить основные способы работы с пользовательским типом данных "класс", его объектами, методами и способы доступа к ним. - Теоретические...
-
Цель Работы - изучить принципы работы элементов управления Progress и Slider. Получить навыки по самостоятельному созданию модальных диалоговых окон. -...
-
Введение - Технология разработки программного обеспечения систем управления
С++ является языком объектно-ориентированного программирования (ООП). Объект - абстрактная сущность, наделенная характеристиками объектов реального мира....
-
Цель Работы - научиться использовать элемент управления ListBox а также основные методы класса СListBox. Использование возможности контроля правильности...
-
Цель Работы - использовать принципы архитектуры "Документ-Представление" для выборки и сохранения данных в файлах, а также взаимодействия элементов меню,...
-
Объект ориентированный класс программирование Цель Работы - изучить методику создания одномерных динамических символьных массивов при помощи...
-
Цель Работы - научиться использовать операции динамического выделения и освобождения памяти на примере работы с одномерными и двумерными массивами, а...
-
Общее описание программного обеспечения, реализующего разработанный алгоритм Основной идеей дипломного проекта, является реализация алгоритма...
-
Последовательность действий при принятии решения о внедрении корпоративной информационной системы С чего начать разработку решения? Любая промышленная...
-
Выбор средств реализации информационной системы Названные в параграфе 1.4. настоящей работы задачи могут быть решены тремя типами средств автоматизации:...
-
Для перехода в административный раздел системы необходимо выбрать пункт меню "Файл" > "Администратор", после чего откроется окно, показанное на...
-
Работа с контентом Контент системы содержит как отдельные медийные составляющие - текст, таблицы, ссылки, графику, так и связанные между собой....
-
Особенностью API для коммуникации с СКУД является то, что авторизация методов происходит не с помощью токена, а с помощью проверки IP адреса клиента на...
-
В течении года от команды разработчиков пришло 6 пакетов, содержащих изменения в ядре программы. Для каждого пакета составлялось в среднем от 1-ого до...
-
Программа адресована членам конструкторских, технических и производственных команд, нуждающимся в управлении данными проекта, в их организации и...
-
Введение - Программное обеспечение для пропускной системы на основе технологии NFC
Массовые мероприятия стали неотъемлемой частью современного мира. Для таких мероприятий требуется быстрая организация временного разделенного доступа для...
-
В работе использовались следующее программное обеспечение для решения поставленных задач: AutoCAD, ANSYS Workbench, ANSYS Icepak. Система AutoCAD...
-
Анализ безопасности - Программное обеспечение для пропускной системы на основе технологии NFC
Для обеспечения безопасности системы было решено использовать протокол HTTPS для связи клиента и сервера. Использование протокола HTTPS для коммуникации...
-
Поскольку клиентская часть представляет собой приложение на базе операционной системы Android, то для ее разработки был выбран рекомендуемый...
-
В этой главе представлено описание инструментов и методов, использованных при написании кода программы. Инструменты разработки серверной части Для...
-
Важнейший элемент АИС--информационное обеспечение. Информационное обеспечение предназначено для отражения информации, характеризующей состояние...
-
Атрибут - Объектно-ориентированный подход и диаграммы классов в UML
Атрибут (attribute) - это инкапсулируемый элемент данных класса, т. е. элемент данных, который содержится в объекте, принадлежащем описываемому классу. У...
-
Программное обеспечение промежуточного уровня (middleware) Является основной концепцией по организации программного обеспечения распределенных систем...
-
Назначение и технологические функции автоматизированной системы оперативного управления перевозками Автоматизированная система оперативного управления...
-
Считается, что правильно организованный документооборот и электронный архив документов становятся необходимыми условиями эффективной работы современного...
-
1. Изучение теоретических аспектов использования: MS Word, MS Excel, MS Access, Paint и Photoshop... (ППО) Часть 1 : Руководство по выполнению...
-
В результате проведенной работы были спроектированы и реализованы модули редактора и вебсайта. Были решены поставленные в работе задачи в полном объеме....
-
В настоящее время систем видеонаблюдения на рынке продается очень много, и обычно бывает очень сложно принять правильное решение, выбрать нужное решение....
-
Разработка программного продукта - Автоматизированные системы управления и обработки информации
В большей степени программные продукты не являются монолитом и имеют конструкцию (архитектуру) построения - состав и взаимосвязь программных модулей....
-
Анализ современных систем безопасности. Правовые аспекты применения видеонаблюдения Установка системы видеонаблюдения и ее использование являются весьма...
-
Общие сведения о тестировании Данный раздел посвящен проведению тестирования клиентского приложения. Тестирование для серверной части системы не...
-
Коммуникация между клиентом и сервером начинается прежде всего с "рукопожатия" ( SSL Handshake). Цели данного рукопожатия, следующие [10]: 1. клиент...
-
Для того, чтобы использовать симметричные алгоритмы шифрования, необходимо безопасно обменяться ключами. Протокол Диффи - Хеллмана позволяет двум и более...
-
В данной главе приводится описание различных криптографических алгоритмов для безопасной передачи данных в приложении. RSA Для того, чтобы избежать...
-
В состав беспроводных информационно - измерительных систем (БИИС) входят устройства трех видов: интеллектуальные датчики (ИД) и их кластеры и центральный...
-
Проведем сравнительную оценку напряженность процесса эксплуатации системы в процессе работы. Для этого заполним таблицу 7.2, в которой отражается степень...
-
Проведем оценку эргономичности пользовательского интерфейса, заполнив таблицу 7.1. В ячейки, отражающие степень выраженности показателя, следует внести...
-
Сравнительная технико-экономическая эффективность разработки определяется по формуле: , (10) Где - сравнительная технико-экономическая эффективность...
-
Solidworcks Enterprise PDM (SWE-PDM) управляет данными и процессами на различных этапах жизненного цикла изделия, обеспечивая коллективную (параллельную)...
Лабораторная работа № 5. Наследование классов, механизм виртуальных функций - Технология разработки программного обеспечения систем управления