Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс лекцій.doc
Скачиваний:
15
Добавлен:
03.11.2018
Размер:
1.12 Mб
Скачать

Рівненський державний аграрний коледж

Курс лекцій

з дисципліни:

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

Рівне 2007

Зміст

Вступ . ...8

1 Деякі особливості С++ ...8

1.1 Коментарі. ...10

1.2 Прототипи функцій. ...10

1.3 Операція розширення області видимості. ...10

1.4 Оголошення в операторах. ...11

1.5 Перегрузка функцій. ...11

1.6 Значення формальних параметрів по замовчуванню. ...12

1.7 Посилання та вказівники. ...13

1.8 Специфікатор INLINE ...16

1.9 Операції NEW та DELETE . ...16

1.10 Вказівник на void. ...17

1.11 Зв’язування з збереженням типів . ...18

1.12 Про структури та об ‘єднання . ...18

Контрольні запитання. ...19

Завдання . ...19

2. Об’єктно-орієнтоване програмування та С++. Класи. .. 20

2.1 Елементи концепції ооп .. 20

2.2 Від структур ANSI C до класів C++ .. 22

2.3 Опис протоколу класу ...24

2.4 Передача повідомлень об’єктам. .. 27

Контрольні запитання. .. 28

Завдання . ...28

3. Про функції-члени класу. ...29

3.1 Функції-члени в межах та за межами формального опису класу.29

3.2 Про вказівник this. ...30

3.3 Перегрузка функцій-членів. Параметри по замовчуванню. ...31

Контрольні запитання. ...32

Завдання . ...32

4. Конструктори та деструктори. ...33

4.1 Поняття про конструктори. ...33

4.2 Деструктори. ...37

4.3 Конструктор копіювання. ...39

Контрольні запитання. ...40

Завдання . ...41

5 Глобальні та локальні об’єкти. ...42

Контрольні запитання. ...44

Завдання . ...45

6. Статична пам’ять та класи. ...45

Контрольні запитання. ...48

Завдання . ...49

7. Наслідування ...49

7.1 Синтаксична реалізація наслідування ...49

7.2 Правила доступу до полів даних ...50

7.3 Конструктори та деструктори в похідних класах ...53

7.4 Використання заміщуючих функцій-членів. ...55

7.5 Похідні класи та вказівники. ...56

7.6 Ієрархія типів ...57

7.7 Множинне наслідування ...58

Контрольні запитання. ...60

Завдання . ...60

8 Віртуальні функції та класи ...61

8.1 Віртуальні функції. ...61

8.2 Чисті віртуальні функції. Абстрактні класи. ...64

8.3 Віртуальні деструктори. ...67

8.4 Посилання як засіб для реалізації поліморфізму ...67

8.5 Технічна реалізація механізму віртуальних функцій. ...68

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

8.6.1 Ієрархії класів та наслідування ...70

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

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

Контрольні запитання. ...74

Завдання . ...74

9 Друзі ...75

9.1 Дружні класи. ...75

9.2 Дружні функції. ...77

Контрольні запитання. ...79

Завдання . ...79

10 Перевантаження операторів ...79

10.1 Перевантаження операторів. Загальний підхід. ...79

10.2 Перетворення типів. ...82

10.3 Перевантаження деяких операторів. ...84

10.3.1 Оператор індексування масиву. ...84

10.3.2 Перевантаження оператора виклику функції. ...86

10.3.3 Оператор доступу до члена класу. ...87

10.3.4 Перевантаження операторів інкремента та декремента. ...88

10.3.5 Перевантаження операторів управління пам’яттю (NEW,DELETE). ...88

10.3.6 Перевантаження оператора присвоювання. ...89

Контрольні запитання. ...90

Завдання . ...90

11 Шаблони С++. ...91

11.1 Функціональні шаблони ...91

11.1.1 Визначення та використання шаблонів функцiй. ...91

11.1.2 Перегрузка шаблонiв функцiї. ...94

11.1.3 Cпецiалiзованi функцiї шаблона. ...95

11.2 Шаблони класів. ...95

11.2.1 Визначення шаблонів класу ...95

11.2.2 Константи та типи як параметри шаблону ...97

11.2.3 Використання шаблонних класів ...98

11.2.4 Спецiалiзацiя шаблонiв класу. .100

11.3 Шаблони i конфiгурацiя компiлятора. .102

11.3.1 Шаблони Smart. .102

11.3.2 Шаблони Global i External. .102

Контрольні запитання. .103

Завдання . .104

12 Ввід-вивід в С++ .104

12.1 Система вводу-виводу С++. .105

12.2 Переадресація вводу-виводу .111

12.3 Розширення потоків для типів коритувача .111

12.4 Операції роботи з потоком як дружні .113

12.5 Форматований ввід-вивід .114

12.5.1 Ширина поля .114

12.5.2 Заповнюючий символ .115

12.5.3 Число цифр дійсних чисел .115

12.5.4 Прапорці форматування .116

12.5.5 Маніпулятори .118

12.6 Стан потоку .119

12.7 Файловий ввід-вивід .119

12.7.1 Конструктори файлових потокiв .120

12.7.2 Вiдкриття файлу .120

12.8 Неформатований ввід/вивід. Бінарні файли. .123

12.9 Деякі функції вводу/виводу .124

12.10 Форматування в пам’яті .126

Контрольні запитання. .128

Завдання . .128

13 Управління виключеннями .......................................................................129

13.1 Виключення та стек..........................................................................130

13.2 Робота з управлінням виключеннями мови С++............................130

13.2.1 Синтаксис основних конструкцій..........................................132

13.2.1.1 Використання try та catch............................................132

13.2.1.2 Використання throw.....................................................133

13.2.2 Тип виключення та конструктор копії................................135

13.2.3 Пошук відповідного типу виключення...............................136

13.2.4 Використання terminate() та некеровані виключення........137

13.2.5 Робота з специфікаціями виключень...................................137

13.2.6 Робота з непередбаченими виключеннями.........................137

13.2.7 Робота з конструкторами та виключеннями......................138

13.2.8 Динамічні об’єкти................................................................140

13.2.9 Передача значень з конструктора та деструктора.............141

13.2.10 Робота з ієрархіями виключень.........................................142

13.2.11 Робота з специфічними класами виключень.....................143

13.2.11.1 xmsg............................................................................143

13.2.11.2 xalloc...........................................................................144

13.3 Структурне управління виключеннями...........................................146

13.3.1 Використання кадрованого управління виключеннями

(_try/_except) ..........................................................................146

13.3.1.1 Синтаксис.....................................................................146

13.3.1.2 Про функцію RaiseException().....................................146

13.3.1.3 Фільтруючий вираз......................................................148

13.3.1.4 Перехоплення виключення процесора........................149

13.3.2 Використання завершуючих обробників виключень..........150

(_try/_finally)

Контрольні запитання. ....152

Завдання . ....153

Деякі міркування на закінчення.......................................................................156

Література ........................................................................................................132

Вступ

Важливим етапом в розвитку технології програмування стало створення та досить широке поширення мови програмування С++. Мова програмування C++ зберігає основні типи даних, операції , синтаксис операторів та структуру програми мови С ( про це свідчить сама назва мови: “C” та “++”). Водночас, це зовсім інша мова, яка ввела в практику програмування новий технологічний підхід - об’єктно-орієнтоване програмування. Введення в практику програмування об’єктно-орієнтованої парадигми дозволяє значно підвищити рівень технології створення програмних засобів, скоротити затрати на розробку програм, їх повторне використання, розширити інтелектуальні можливості ЕОМ.

Великий внесок у створення даної парадигми внесли У.Далл та

Б.Мюрхарг, які розробили в 60-х роках мову моделювання дискретних систем Симула-67. Ця мова включила в себе базові концепції ООП. Велике значення у розвитку даного напряму мали роботи по розвитку концепції абстрактних типів даних Б.Лискова, Н.Вірта, Д.Парнаса та ін. Однак, найбільш повно та цілісно об’єктно-орієнтована парадигма була реалізована в мові Smalltalk-80, який був розроблений в 70-ті роки в науковому центрі Palo Alto фірми Xerox під керівництвом А.Гольдберга. По суті, Smalltalk-80 являв собою мову деякої абстрактної машини, яка мала об’єктно-орієнтовану пам’ять. Маніпулювання з елементами пам’яті (об’єктами) грунтувалось на використанні механізму повідомлень, які посилаються об’єктам. Крім того, ця абстрактна машина підтримувала графічно-орієнтований дружній інтерфейс з користувачем. Ця тріада мови Smalltalk-80 стала революційним поворотом в технології програмування. Використання об’єктів дозволило по-перше, конструювати адекватні інформаційні зображення реальних проблемних областей, використовуючи прийняті для цих областей поняття та та семантичні знання, по-друге, створювати ідеальні абстрактні моделі реального світу , формально задаючи закони його існування, по-третє, надати можилвість безпосереднього, прямого, немовного за формою маніпулювання семантичними сутностями середовища, що моделюється (тобто, по суті, можливість маніпулювання об’єктами на підсвідомому рівні, так як це робить людина при управлінні машиною чи інструментом).

Завоювавши право називатись науковою перлиною , мова Smalltalk-80 не стала практичною мовою програмування. Першим індустріальним проривом даної парадигми стало створення під керівництвом С. Джобса персонального комп’ютера фірми Macintosh. Перед створенням цього комп’ютера С.Джобс детально вивчав в Palo Alto результати досліджень по мові Smalltalk-80. Тому архітектура цього комп’ютера була розрахована на підтримку об’єктно-орієнтованого підходу.

Розробка мови С++ - слідуюча віха в становленні об’єктно-орієнтованого підходу як практично універсальної бази в інформаційній індустрії. Аналіз тенденцій та перспектив розвитку даного напряму показує, що він не являється данню моді, а має фундаментальне загальнонаукове значення, здійснюючи все більший вплив на розвиток нових областей інформатики.

1 ДЕЯКІ ОСОБЛИВОСТI C++. КОРОТКИЙ ОГЛЯД.