- •Методические указания
- •090303 «Информационная безопасность автоматизированных систем» очной формы обучения
- •Указания по технике безопасности при выполнении лабораторных работ
- •2 Курс Лабораторная работа № 1 Реализация строкового калькулятора
- •Теоретическая справка
- •Лабораторная работа № 2
- •Теоретическая справка
- •Лабораторная работа № 3 Анализ строки
- •Лабораторная работа № 4 Преобразование форматов представления данных
- •Теоретическая справка
- •Лабораторная работа № 5
- •Теоретическая справка
- •Лабораторная работа № 6 Наследование и полиморфизм
- •Теоретическая справка
- •Лабораторная работа № 7 Статические данные и функции классов
- •Теоретическая справка
- •Лабораторная работа № 8 Перегрузка операций
- •Теоретическая справка
- •3 Курс Лабораторная работа № 1 Реализация программы с использованием контейнерного класса stack stl
- •Теоретическая справка
- •Лабораторная работа № 2 Ассоциативные контейнеры stl
- •Теоретическая справка
- •Лабораторная работа № 3 Наследование и полиморфизм в языке c#
- •Лабораторная работа № 4 Коллекции в языке c#
- •Теоретическая справка
- •Лабораторная работа № 5 Перегрузка операций в языке c#
- •Теоретическая справка
- •Лабораторная работа № 6 Интерфейсы и их реализация в c#
- •Теоретическая справка
- •Лабораторная работа № 7 Делегаты и события в языке c#
- •Теоретическая справка
- •Лабораторная работа № 8 Использование шаблонов в языке c# 2.0
- •Теоретическая справка
- •Библиографический список
- •Содержание
- •2 Курс 2
- •3 Курс 15
- •Методические указания
- •090303 «Информационная безопасность автоматизированных систем» очной формы обучения
- •394026 Воронеж, Московский просп., 14
Лабораторная работа № 5
Классы и объекты в С++
Цель работы: Получить практические навыки работы с объектами и классами. Изучить способы реализации конструкторов и деструкторов классов.
Задание: Создать класс «СОТРУДНИК», в котором должны быть следующие закрытые данные-члены: имя (char*), фамилия(char*), дата рождения (объект определенного пользователем класса «ДАТА»). Предусмотреть функции-члены для изменения и получения данных. Явно задать конструктор и деструктор класса.
Инструкции к выполнению:
- При реализации определить два конструктора классов – с параметрами и без параметров.
- При срабатывании конструкторов и деструкторов выводить на экран соответствующие сообщения.
- В программе определить объект, указатель на объект, инициализировать этот указатель.
- Ввод и вывод информации производить в функции main.
Теоретическая справка
Классы - это типы, определенные в конкретной программе. Определение класса включает в себя описание, из каких составных частей или атрибутов он состоит и какие операции определены для класса.
Предположим, в программе необходимо оперировать комплексными числами.
class Complex {
public:
int real; // вещественная часть
int imaginary; // мнимая часть
void Add(Complex x);
// прибавить комплексное число
};
Приведенный выше пример - упрощенное определение класса Complex, представляющее комплексное число. Комплексное число состоит из вещественной части - целого числа real и мнимой части, которая представлена целым числом imaginary. real и imaginary - атрибуты класса. Для класса Complex определена одна операция или метод - Add.
Определив класс, мы можем создать переменную типа Complex: Complex number;
Переменная с именем number содержит значение типа Complex, то есть содержит объект класса Complex. Имея объект, мы можем установить значения атрибутов объекта:
number.real = 1;
number.imaginary = 2;
Операция "." обозначает обращение к атрибуту объекта . Создав еще один объект класса Complex, мы можем прибавить его к первому:
Complex num2;
number.Add(num2);
Лабораторная работа № 6 Наследование и полиморфизм
Цель работы: Получить практические навыки работы с наследованием и виртуальными функциями в C++.
Задание: Реализовать иерархию классов «журнал», «книга», «печатное издание», «учебник». Определить необходимые данные-члены (название, год издания, номер выпуска) В базовом классе создать конструктор, инициализирующий объект класса. Создать в базовом классе виртуальную функцию, выводящую на полную информацию об издании. Перегрузить эту функцию во всех производных классах.
Инструкции к выполнению:
Базовый класс может быть реализован как абстрактный.
Ввод и вывод информации осуществлять в функции main.
Теоретическая справка
Функция-член класса может содержать спецификатор virtual. Такая функция называется виртуальной. Спецификатор virtual может быть использован только в объявления нестатических функций-членов класса.
Если некоторый класс содержит виртуальную функцию, а производный от него класс содержит функцию с тем же именем и типами формальных параметров, то обращение к этой функции для объекта производного класса вызывает функцию, определённую именно в производном классе. Функция, определённая в производном классе, вызывается даже при доступе через указатель или ссылку на базовый класс. В таком случае говорят, что функция производного класса подменяет функцию базового класса.
Интерпретация вызова виртуальной функции зависит от типа объекта, для которого она вызывается, в то время как интерпретация вызова невиртуальной функции-члена класса зависит от типа указателя или ссылки, указывающей на этот объект.
Этот механизм делает производные классы и виртуальные функции ключевыми понятиями при разработке программ на С++. Базовый класс определяет интерфейс, для которого производные классы обеспечивают набор реализаций. Указатель на объект класса может передаваться в контекст, где известен интерфейс, определённый одним из его базовых классов, но этот производный класс неизвестен. Механизм виртуальных функций гарантирует, что этот объект всё равно будет обрабатываться функциями, определёнными для него, а не для базового класса.
Спецификатор virtual предполагает принадлежность функции классу, поэтому виртуальная функция не может быть ни глобальной функцией, ни статическим членом класса, поскольку вызов виртуальной функции нуждается в конкретном объекте для выяснения того, какую именно функцию следует вызывать.