Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП_Лаб_Гриф.doc
Скачиваний:
7
Добавлен:
14.11.2019
Размер:
2.81 Mб
Скачать

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

При множинному спадкуванні базовий клас не може задаватися в похідному класі більш одного разу. Однак, базовий клас можна передавати похідному класу більш одного разу побічно:

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; // Створення об'єкта базового класу 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. Виклики віртуальних деструкторів компонуються під час виконання програми й об'єкти самі визначають, який деструктор треба викликати.

Хід роботи

  1. Вивчити теоретичні відомості.

  2. Відповідно до індивідуального завдання на базі заняття №22 розробити алгоритм роботи з об'єктами базових і похідних класів з використанням покажчиків на базові і похідні класи. При необхідності довести ієрархію класів до 3-4-х рівнів.

  3. Набрати програму на комп'ютері й усунути помилки.

  4. Одержати результат.

  5. Оформити звіт.

  6. Підготуватися до захисту заняття, вивчивши контрольні питання по даній темі.

Вимоги до змісту звіту приведені в занятті №1.

Питання для контролю і самостійної роботи

  1. Які функції-члени називаються убудованими (inline) ?

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

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

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

  5. Чи можна адресувати об'єкти ПК за допомогою покажчиків на загальний БК, на попередній БК по ієрархії, на нижчий по ієрархії ПК ?

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

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

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

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

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

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

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

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

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

  15. Коли виконується вибір віртуальної функції, яку необхідно викликати для заданого об'єкта ПК, якщо для адресації об'єкта ПК використовується покажчик на БК ?

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

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

Список рекомендованої літератури

  1. Методические указания для студентов всех специальностей. Структура и правила оформления текстовых документов. / Сост. В.М. Гах. - Краматорск: ДГМА, 1999. – 33 с.

  2. Керниган Б., Ритчи Д. Язык программирования Си. – 2-изд. –М.: Финансы и статистика, 1992 – 272 с.

  3. Страуструп Б. Язык программирования С++. –М.: Радио и связь, 1991 – 352 с.

  4. Прокофьев Б.П., Сухарев Н.Н. и др. Графические средства Turbo C++. - М.: ФИС, 1992 – 160 с.

  5. Романовская Л.М., Русс Т.В., Святковский С.Г. Программирование в среде Си для ПЭВМ ЕС. - М.: ФИС, 1992 – 352 с.

  6. Берри Р., Микин Б. Язык Си. Введение для программирования. –1998 – 198с.

  7. Шилдт Г. Язык "Си" для профессионалов. –М.: ИВК-СОФТ, 1992 – 319 с.

  8. Ален И. Голуб. С и Си++ . Правила программирования. / Под ред. В. Костенко. – М.: БИНОМ, 1996 – 272 с.

  9. Бочков С.О., Субботин Д.М. Язык программирования Си для персонального компьютера. / Под ред. А.И.Садчикова. – М.: Диалог, Радио и связь, 1990 – 384 с.

  10. Болски М.И. Язык программирования Си: Справочник. Перевод с английского. – М.: Радио и связь, 1988 – 96с.

  11. Лукас П. С++ под рукой: Справочник. _ КР: Диасофт, 1993 – 176 с.

  12. Проценко В.С., Чаленко И.П., Ставровский А.Б. Техника программирования языком Си. - К: Либідь, 1993 – 224 с.

  13. Ирэ П. Объектно-ориентированное программирование с использованием С++. – К.: НИПФ "Диасофт Лтд.", 1995 – 480 с.

  14. Буч Г. Объектно-ориентированное проектирование. – К.: Диалектика, ИВК (Москва), 1992 – 519 с.

  15. Сван Т. Освоение Borland C++ 4.5. Практический курс. В 2-х томах. 2 – изд. - К.: Диалектика, 1996 – 544с.

  16. Поттс С., Монк Т.С. Borland C++ в примерах. - Минск: Попури, 1996 – 752 с.

Зміст

Стор.

Заняття№ 1. Вивчення інтегрованого середовища С..................………….

3

Заняття№2. Функції введення/виведення даних print( ), scanf( ). Лінійні обчислювальні процеси………............................……....…

5

Заняття№ 3. Розробка програм зі скалярними типами даних……………

12

Заняття№ 4. Розробка програм з циклічними обчислювальними процесами………………………….......………....…………………

20

Заняття №5. Розгалуження обчислювального процеса. Оператори, які реалізують розгалуження: if... else, switch, умовна операція ( ? : )

27

Заняття№6. Операції С, їхні пріоритети і використання. Перетворення типів…………............................……....…………………………….

35

Заняття№7. Розробка програм з функціями. Оголошення, визначення і виклик функцій...………...…………………………………………..

45

Заняття№ 8. Розробка. програм з покажчиками.............…..………………

53

Заняття№ 9. Масиви. Селективна обробка масивів....……………………..

61

Заняття№ 10. Формування робочих масивів за допомогою операцій селекції вихідного масиву............................................…..………….

67

Заняття№ 11. Обробка символьних даних.........…………………………..

72

Заняття№ 12. Використання бібліотечних функцій для роботи із символьними даними.......................................................…..………

75

Заняття№ 13. Вкладені цикли. Багатомірні масиви. Масиви покажчиків..

80

Заняття№ 14. Розробка програм зі складеними типами даних.....…….….

87

Заняття№ 15. Використання покажчиків для роботи зі складеними типами даних……………………...........……......………………..…

93

Заняття№ 16. Використання покажчиків для роботи з функціями………

98

Заняття№17 Використанням функцій високого і низького рівня для роботи з потоками...…………………………………….....…………

105

Заняття№ 18. Розробка програм із багатофайловою структурою. Заголовочні файли. Класи пам'яті перемінних і функцій…………

113

Заняття№ 19. Вивчення графічних функцій С......….....…………………...

120

Заняття№ 20. Розробка програм з використанням класів…………………

126

Заняття№ 21. Використання конструкторів і деструкторів у класах…..…

134

Заняття№ 22. Використання спадкування для створення ієрархії класів..

139

Заняття№ 23. Використання віртуальних функцій і покажчиків для роботи з об'єктами класів........................………...…………………

146

Список рекомендованої літератури………………………………………..

150

Вихідні дані

НАВЧАЛЬНИЙ ПОСІБНИК.

Практикум для виконання лабораторних робіт з дисципліни

«Мови об’єктно-орієнтованого програмування»

Укладачі: О.Ф.Тарасов,

О.В.Алтухов

Редактор

Підп. до др. Формат 60х84 1/16 Офсетний друк

Ум. друк. арк. Облік.-вид. арк. Тираж 25 пр.

ДДМА, 84313, Краматорськ, вул. Шкадінова, 72

152