- •Министерство образования и науки украины
- •Лабораторная работа № 1
- •Ход работы
- •Требования к отчетам
- •Отчёт должен содержать
- •Вопросы для контроля и самостоятельной работы
- •Лабораторная работа №2
- •Символы типа
- •Ход работы
- •Вопросы для контроля и самостоятельной работы
- •Лабораторная работа №3 Разработка программ со скалярными типами данных (2 часа)
- •Теоретические сведения
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №4 Разработка программ с циклическими вычислительными процессами
- •Теоретические сведения
- •Алгоритм работы оператора цикла for ():
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №5 Разветвляющийся вычислительный процесс с различными логическими условиями: оператор if... Else, условная операция (?:), оператор switch, оператор break, оператор goto (2 часа)
- •Теоретические сведения
- •Условная тернарная операция (?:)
- •Оператор варианта switch
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №6 Операции с, их приоритеты и использование. Преобразование типов (4 часа)
- •Теоретические сведения
- •Приоритет операций и порядок выполнения (ассоциативность)
- •Преобразование типов
- •(Новый_тип) операнд
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №7
- •Синтаксис определения функций в с
- •Использование локальных и глобальных переменных в функциях. Вызов функции
- •Ход работы
- •Требования к содержанию отчёта приведены в лабораторной работе №1. Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №8 Разработка программ с указателями (2 часа)
- •Теоретические сведения
- •Основные операции с указателями
- •Указатели и целые величины
- •Динамическое размещение указателей в памяти
- •Ход работы
- •Требования к содержанию отчёта приведены в лабораторной работе №1. Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №9 Массивы. Селективная обработка массивов
- •Теоретические сведения
- •Ход работы
- •Требования к содержанию отчёта приведены в лабораторной работе №1
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №10
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №11
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа № 12
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа № 13
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа № 14
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа № 15 Использование указателей для работы с составными типами данных (2часа)
- •Теоретические сведения
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа № 16
- •Указатели как параметры функции
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №17
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа № 18
- •Использование администратора проектов
- •Lab18.Cpp- Основной файл проекта
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа № 19
- •Доступ к пикселям
- •Графические примитивы
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №20 Разработка программ с использованием классов (2 часа)
- •Теоретические сведения
- •Объявление и определение класса
- •Тело класса
- •Использование класса
- •Инкапсуляция. Управление доступом к членам класса
- •Классы памяти для объектов
- •Использование данных-членов класса
- •Ход работы
- •Требования к содержанию отчёта приведены в лабораторной работе №1. Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №21
- •Инициализация объектов класса
- •Деструкторы
- •Вызов деструкторов
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №22 Использование наследования для создания иерархии классов (2 часа)
- •Теоретические сведения
- •"Друзья" классов (friend)
- •Ход работы
- •Контрольные вопросы для подготовки и самостоятельной работы
- •Лабораторная работа №23 Использование виртуальных и указателей для работы с объектами классов (2 часа)
- •Теоретические сведения
- •Виртуальные базовые классы
- •Виртуальные деструкторы
- •Ход работы
- •Литература
- •Выходные данные
Виртуальные базовые классы
При множественном наследовании базовый класс не может задаваться в производном классе более одного раза. Однако, базовый класс можно передавать производному классу более одного раза косвенно:
class B { ... }; class D : B, B { ... }: // недопустимо |
class X : public B { ... }; class Y : public B { ... }; class Z : public X, public Y { ... }; // допустимо |
В данном случае каждый объект класса Z будет иметь два подобъекта класса В. Для устранения этой проблемы к спецификатору базового класса добавляют ключевое слово virtual. Например:
class X : virtual public B { ... }; // теперь В является виртуальным базовым
классом
class Y : virtual public B { ... };
class Z : public X, public Y { ... } // класс Z имеет только один подобъект класса В.
Виртуальные деструкторы
Конструкторы не могут быть виртуальными. Деструктор может быть объявлен как виртуальный (virtual). Это позволяет указателю на базовый класс вызывать необходимый деструктор в случае, когда указатель ссылается на объект производного класса. Деструктор производного класса от базового класса с виртуальным деструктором является виртуальным.
class color {... public: virtual ~color(); // виртуальный // деструктор для класса color }; |
class red : public color {... public: virtual~red(); // деструктор для red // также является виртуальным }; |
class brightred : public red
{...
public:
virtual~brightred(); // деструктор для brightred также виртуальный
};
Рассмотрим работу с объектами объявленных классов. Указатель на базовый класс может адресовать объекты производных классов
Color *palette[3]; // объявление массива указателей на базовый класс
Palette[0] = new red; // создание объекта класса red в куче
palette[1] = new brightred; // создание объекта класса brightred в куче
palette[2] = new color; // создание объекта базового класса в куче
Применение оператора delete
delete palette[0]; // вызывается деструктор для объекта класса red
delete palette[1]; // деструктор для объекта класса brightred
delete palette[2]; // запуск деструктора для объекта класса color
Однако, если ни один из деструкторов не был объявлен виртуальным, то выражения delete palette[0], delete palette[1] и delete palette[2] вызывают только деструктор для базового класса color, на который объявлен массив указателей. Это приведет к неправильному уничтожению первых двух элементов, которые фактически имели тип red и brightred. Вызовы виртуальных деструкторов компонуются во время выполнения программы и объекты сами определяют, какой деструктор надо вызвать.
Ход работы
Изучить теоретические сведения.
В соответствии с индивидуальным заданием на базе лабораторной работы №22 разработать алгоритм работы с объектами базового и производных классов с использованием указателей на базовые и производные классы. При необходимости довести иерархию классов до 3-4-х уровней.
Набрать программу на компьютере и устранить ошибки.
Получить результат.
Оформить отчет.
Подготовиться к защите лабораторной работы, изучив контрольные вопросы по данной теме.
Требования к содержанию отчёта приведены в лабораторной работе №1.
Контрольные вопросы для подготовки и самостоятельной работы
Какие функции-члены называются встроенными (inline)?
Какие функции-члены называется перегруженными?
Какие функции-члены называются замещающими?
Какие функции- члены называется виртуальными?
Можно ли адресовать объекты ПК с помощью указателей на общий БК, на предыдущий БК по иерархии?
Назовите правила использования указателей для работы с объектами БК и ПК.
Когда необходимо определение виртуальной функции в базовом классе?
Какой класс называется абстрактным?
Можно ли создать объект абстрактного класса?
Какая функция называется чисто виртуальной?
Можно ли установить в процессе компиляции какая функция будет вызываться при использовании указателей для работы с объектами?
Могут ли конструкторы и деструкторы быть виртуальными? Чем это вызвано?
Как производится размещение объектов классов в "куче"?
Как производится выделение и освобождение памяти для динамически создаваемых объектов?
Когда производится нахождение виртуальной функции, которую необходимо вызвать для заданного объекта ПК, если для адресации объекта ПК используется указатель на БК.?
Какая невиртуальная функция будет вызвана в указанном случае и почему?
Для чего или как объявляются виртуальные классы?