Віртуальні базові класи

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)?

Які функції-члени називається перевантаженими?

Які функції-члени називаються заміщають?

Які функції-члени називається віртуальними?

Назвіть правила використання покажчиків для роботи з об'єктами БК і ПК.

Коли необхідно визначення віртуальної функції в базовому класі?

Який клас називається абстрактним?

Чи можна створити об'єкт абстрактного класу?

Яка функція називається чисто віртуальної?

Чи можна встановити в процесі компіляції яка функція буде викликатися при використанні покажчиків для роботи з об'єктами?

Чи можуть конструктори і деструктори бути віртуальними? Чим це викликано?

Як проводиться розміщення об'єктів класів в "купі"?

Як проводиться виділення і звільнення пам'яті для динамічно створюваних об'єктів?

Яка Невіртуальна функція буде викликана в зазначеному випадку і чому?

Для чого або як оголошуються віртуальні класи?

Схожі статті