brightred (); // деструктор для brightred також віртуальний
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)?
Які функції-члени називається перевантаженими?
Які функції-члени називаються заміщають?
Які функції-члени називається віртуальними?
Назвіть правила використання покажчиків для роботи з об'єктами БК і ПК.
Коли необхідно визначення віртуальної функції в базовому класі?
Який клас називається абстрактним?
Чи можна створити об'єкт абстрактного класу?
Яка функція називається чисто віртуальної?
Чи можна встановити в процесі компіляції яка функція буде викликатися при використанні покажчиків для роботи з об'єктами?
Чи можуть конструктори і деструктори бути віртуальними? Чим це викликано?
Як проводиться розміщення об'єктів класів в "купі"?
Як проводиться виділення і звільнення пам'яті для динамічно створюваних об'єктів?
Яка Невіртуальна функція буде викликана в зазначеному випадку і чому?
Для чого або як оголошуються віртуальні класи?