Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник 34.docx
Скачиваний:
25
Добавлен:
30.04.2022
Размер:
74.1 Кб
Скачать

Лабораторная работа № 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 предполагает принадлежность функции классу, поэтому виртуальная функция не может быть ни глобальной функцией, ни статическим членом класса, поскольку вызов виртуальной функции нуждается в конкретном объекте для выяснения того, какую именно функцию следует вызывать.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]