ЗАДАНИЕ 1 Рассматривается иерархия классов геометрических фигур
Работа добавлена на сайт samzan.net:
Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
от 25%
Подписываем
договор
Исследования механизма виртуальных функций
ЗАДАНИЕ 1
- Рассматривается иерархия классов геометрических фигур. В качестве базового используется класс Figure, не имеющий полей данных. В классе определена функция void show(void), которая выдает сообщение "Функция класса Figure".
- Как производные от класса Figure (public) описываются классы кругов (Circle) и прямоугольников (Rectangle). В классе Circle конструктор принимает один аргумент (радиус) и проверяет, больше ли он нуля (при ошибке - выход из программы с соответствующим сообщением). В классе Rectangle конструктор имеет один или два аргумента - длины сторон соответственно квадрата и прямоугольника (проверка >0).
- В классах Circle и Rectangle определены также следующие функции-члены:
- double area(void), вычисляющая и возвращающая площадь соответствующей фигуры;
- void show(void), выводящая информацию о типе фигуры (круг, прямоугольник и т.п.), о заданных размерах фигуры (например, радиус для круга, или длины сторон прямоугольника) и величину площади фигуры.
Функция show должна идентифицировать случай квадрата. Для проведения исследований в этих классах должны быть описаны public-функции, возвращающие адреса каждого из полей данных (радиуса для круга или каждой из сторон для прямоугольника).
- Создать объекты классов Figure, Circle и Rectangle (прямоугольник и квадрат). Для объектов классов Circle и Rectangle выяснить структуру, для чего найти размер объекта, адрес объекта и адреса каждого из полей.
- Создать массив pF из четырех указателей на Figure и инициализировать его элементы адресами созданных объектов. Вызвать для каждого из элементов массива функцию show. Описать какие результаты получены и почему.
- В классе Figure описать функцию show как виртуальную. Вновь исследовать структуры объектов классов Circle и Rectangle (размеры и адреса объектов и их полей). Повторить вызовы функции для элементов массива pF. Описать какие изменения произошли в результатах работы программы.
- В классе Figure объявить чисто виртуальную функцию double area(void). Откомпилировать программу. В отчете объяснить, что из ранее выполнявшегося теперь невозможно и почему. Скорректировать программу, исключив из нее неверные действия.
- Вновь исследовать структуру объектов классов Circle и Rectangle.
Виртуальные деструкторы
ЗАДАНИЕ 2 (Исследование механизма виртуальных деструкторов)
- Создать иерархию классов Base <- Derived1 <- Derived2 с наследованием типа public. Классы имеют деструкторы, сообщающие о своей принадлежности данному классу.
- В функции main определить два указателя pB1 и pB2 на класс Base. Инициализировать эти указатели адресами объектов типов Derived1 и Derived2, созданными с помощью операции new.
- С помощью операции delete освободить память, выделенную для этих объектов. Перед выполнением операции программа должна выводить сообщение "Удаляется объект Derived1" (или Derived2). Какие деструкторы вызываются в каждом случае? Есть в этом ли проблема и какая?
- Деструктор класса Base сделать виртуальным. Выполнить программу. Какие изменения произошли в результатах? Повлияла ли виртуальность деструктора класса Base на действия с объектом Derived2 ?