Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
+ООП_Навч_посібник.doc
Скачиваний:
8
Добавлен:
01.07.2025
Размер:
6.58 Mб
Скачать

2.2. Розроблення реальної навчальної програми 40

2.2.1. Присвоєнням значень змінним 40

2.2.2. Введення даних у програму 41

2.2.3. Деякі можливості виведення даних 42

2.2.4. Введення нового типу даних 42

2.3. Функції – "будівельні блоки" С++-програми 43

2.3.1. Основні поняття про функції 43

2.3.2. Загальний формат С++-функцій 45

2.3.3. Передавання аргументів функції 45

2.3.4. Повернення функціями аргуметів 47

2.3.5. Спеціальна функція main() 48

2.4. Поняття про логічну та циклічну настанови 49

2.4.1. Логічна настанова if 49

2.4.2. Циклічна настанова for 50

2.5. Структуризація С++-програми 51

2.5.1. Поняття про блоки програми 51

2.5.2. Використання крапки з комою і розташування настанов 52

2.5.3. Практика застосування відступів 52

2.6. Елементи визначення мови програмування C++ 53

2.6.1. Поняття про ключові слова 53

2.6.2. Розроблення ідентифікаторів користувача 53

2.6.3. Використання стандартної бібліотеки 54

Розділ 3. Основні типи даних| у мові програмування C++ 55

3.1. Оголошення змінних 56

3.1.1. Локальні змінні 56

3.1.2. Формальні параметри 57

3.1.3. Глобальні змінні 57

3.2. Модифікатори типів даних 58

3.3. Поняття про літерали 61

3.3.1. Шістнадцяткові та вісімкові літерали 62

3.3.2. Рядкові літерали 62

3.3.3. Символьні керівні послідовності 62

3.4. Ініціалізація змінних 63

3.5. Оператори С++-програми 64

3.5.1. Поняття про вбудовані оператори 64

3.5.2. Арифметичні оператори 65

3.5.3. Оператори інкремента і декремента 66

3.5.4. Історія походження імені мови програмування C++ 67

3.5.5. Оператори відношення та логічні оператори 67

3.6. Запис арифметичних виразів 69

3.6.1. Перетворення типів у виразах 70

3.6.2. Перетворення, що відбуваються під час використання типу bool 70

3.6.3. Операція приведення типів даних 71

Розділ 4. Поняття про настанови керування ходом виконання С++-програми 72

4.1. Використання настанови вибору if 72

4.1.1. Умовний вираз 73

4.1.2. Вкладені if-настанови 74

4.1.3. Конструкція if-else-if 75

4.2. Використання настанови багатовибірного розгалуження switch 76

4.2.1. Особливості роботи настанови 76

4.2.2. Організація вкладених настанов багатовибірного розгалуження 79

4.3. Використання настанови організації циклу for 79

4.3.1. Варіанти використання настанови організації циклу for 81

4.3.2. Відсутність елементів у визначенні циклу 82

4.3.3. Нескінченний цикл 83

4.3.4. Цикли часової затримки 83

4.4. Використання інших ітераційних настанов 84

4.4.1. Ітераційна настанова while 84

4.4.2. Ітераційна настанова do-while 85

4.4.3. Використання настанови переходу continue 86

4.4.4. Використання настанови break для виходу з циклу 87

4.4.5. Організація вкладених циклів 88

4.5. Використання настанови безумовного переходу goto 89

4.6. Приклад використання настанов керування 89

Розділ 5. Масиви та рядки – засоби групування взаємопов'язаних між собою змінних 91

5.1. Одновимірні|одномірні| масиви 91

5.1.1. На межах масивів "прикордонної застави" немає 93

5.1.2. Сортування масиву 93

5.2. Побудова символьних рядків 95

5.2.1. Оголошення рядкового літерала 95

5.2.2. Зчитування рядків з клавіатури 95

5.3. Застосування бібліотечних функцій для оброблення рядків 97

5.3.1. Використання функції strcpy() 97

5.3.2. Використання функції strcpy() 97

5.3.3. Використання функції strcmp() 98

5.3.4. Використання функції strlen() 99

5.3.5. Використання ознаки завершення рядка 101

5.4. Дво- та багатовимірні масиви 101

5.4.1. Двовимірні масиви 101

5.4.2. Багатовимірні|багатомірні| масиви 103

5.5. Ініціалізація масивів 103

5.5.1. Ініціалізація "розмірних" масивів 103

5.5.2. "Безрозмірна" ініціалізація масивів 106

5.6. Масиви рядків 107

5.6.1. Побудова масивів рядків 107

5.6.2. Приклад використання масивів рядків 108

Розділ 6. Особливості застосування покажчиків 111

6.1. Основні поняття про покажчики 111

6.2. Використання|із| покажчиків з операторами присвоєння 112

6.2.1. Оператори роботи з покажчиками 112

6.2.2. Важливість застосування базового типу покажчика 113

6.2.3. Присвоєння значень за допомогою покажчиків 115

6.3. Використання покажчиків у виразах 115

6.3.1. Арифметичні операції над покажчиками 115

6.3.2. Порівняння покажчиків 117

6.4. Покажчики і масиви 117

6.4.1. Основні відмінності між індексуванням елементів масивів і арифметичними операціями над покажчиками 118

6.4.2. Індексування покажчика 120

6.4.3. Взаємозамінність покажчиків і масивів 120

6.4.4. Масиви покажчиків 121

6.4.5. Покажчики і рядкові літерали 123

6.4.5. Приклад порівняння покажчиків 124

6.5. Ініціалізація покажчиків 125

6.5.1. Домовленість про нульові покажчики 125

6.5.2. Покажчики і 16-розрядні середовища 125

6.5.3. Багаторівнева непряма адресація 126

6.6. Виникнення проблем під час використання покажчиків 127

6.6.1. Неініціалізовані покажчики 127

6.6.2. Некоректне порівняння покажчиків 128

6.6.3. Не встановлення покажчиків 129

Розділ 7. Основи застосування С++-функцій 131

7.1. Правила дії областей видимості функцій 131

7.1.1. Локальні змінні 131

7.1.2. Оголошення змінних в ітераційних настановах і настановах вибору 135

7.1.3. Формальні параметри 136

7.1.4. Глобальні змінні 136

7.2. Передача покажчиків і масивів як аргументів функціям 138

7.2.1. Виклик функцій з покажчиками 138

7.2.2. Виклик функцій з масивами 139

7.2.3. Передача функціям рядків 142

7.3. Аргументи функції main(): argc і argv 143

7.3.1. Передача програмі числових аргументів командного рядка 145

7.3.2. Перетворення числових рядків у числа 146

7.4. Використання у функціях настанови return 147

7.4.1. Завершення роботи функції 147

7.4.2. Повернення значень 148

7.4.3. Функції, які не повертають значень (void-функції) 150

7.4.4. Функції, які повертають покажчики 150

7.4.5. Прототипи функцій 152

7.4.6. Грунтовніше про заголовки у C++-програмах 153

7.4.7. Організація рекурсивних функцій 153

Розділ 8. Використання засобів програмування для розширення можливостей С++-функцій 157

8.1. Способи передачі аргументів функціям 157

8.1.1. Механізм передачі аргументів у мові програмування C++ 157

8.1.2. Використання покажчика для забезпечення виклику за посиланням 158

8.2. Посилальні параметри 159

8.2.1. Механізм дії посилальних параметрів 160

8.2.2. Варіанти оголошень посилальних параметрів 162

8.2.3. Повернення посилань 163

8.2.4. Створення обмеженого (безпечного) масиву 165

8.2.5. Поняття про незалежні посилання 166

8.2.6. Врахування обмежень під час використання посилань 167

8.2.7. Перевантаження функцій 167

8.2.8. Поняття про ключове слово overload 170

8.3. Передача аргументів функції за замовчуванням 170

8.3.1. Можливі випадки передачі аргументів функції за замовчуванням 171

8.3.2. Порівняння можливості передачі аргументів функції за замовчуванням з її перевантаженням 172

8.3.3. Особливості використання аргументів, що передаються функції за замовчуванням 174

8.4. Перевантаження функцій і неоднозначності, що при цьому виникають 174

Розділ 9. С++-специфікатори та спеціальні оператори 177

9.1. Специфікатори типів даних 177

9.1.1. Застосування специфікатора типу даних const 177

9.1.2. Застосування специфікатора типу даних volatile 179

9.2. Специфікатори класів пам'яті 180

9.2.1. Застосування специфікатора класу пам'яті auto 181

9.2.2. Застосування специфікатора класу пам'яті extern 181

9.2.3. Статичні змінні 182

9.2.4. Регістрові змінні 185

9.2.5. Походження модифікатора register 186

9.3. Порозрядні оператори 188

9.3.1. Порозрядні оператори І, АБО, що виключає АБО і НЕ 188

9.3.2. Оператори зсуву 191

9.4. Спеціальні оператори розширення можливостей мови С++ 193

9.4.1. Перерахунки – списки іменованих цілочисельних констант 193

9.4.2. Створення нових імен для наявних типів даних 196

9.4.3. Оператор "знак запитання" 196

9.4.4. Складені оператори присвоєння 198

9.4.5. Оператор "кома" 198

9.4.6. Декілька присвоєнь "в одному" 199

9.4.7. Використання ключового слова sizeof 199

9.5. С++-система динамічного розподілу пам'яті 200

9.5.1. Оператори динамічного розподілу пам'яті 201

9.5.2. Ініціалізація динамічно виділеної пам'яті 202

9.5.3. Динамічне виділення пам'яті для масивів 203

9.5.4. Функції виділення та звільнення пам'яті у мові програмування С 204

9.6. Зведена таблиця пріоритетів виконання С++-операторів 205

Розділ 10. Поняття про структури і об'єднання даних 206

10.1. Робота зі структурами 206

10.1.1. Основні положення 206

10.1.2. Доступ до членів структури 208

10.1.3. Масиви структур 209

10.1.4. Приклад застосування структури 209

10.1.5. Присвоєння структур 214

10.1.6. Передача структури функції як аргументу 215

10.1.7. Повернення функцією структури як значення 216

10.2. Використання покажчиків на структури і оператора "стрілка" 218

10.2.1. Особливості використання покажчиків на структури 218

10.2.2. Приклад використання покажчиків на структури 218

10.3. Посилання на структури 220

10.3.1. Використання структур під час передачі функції параметрів за посиланням 221

10.3.2. Використання як членів структур масивів і структур 222

10.3.3. Порівняння С- і С++-структур 223

10.4. Бітові поля структур 223

10.5. Особливості використання об'єднань 225

10.5.1. Оголошення об'єднання 225

10.5.2. Анонімні об'єднання 229

10.5.3. Використання оператора sizeof для гарантії переносності коду програми 230

Частина ІІ. Об'єктно-орієнтоване програмування мовою С++ 231

Розділ 11. Основи розроблення об'єктно-орієнтованих програм мовою C++ 233

11.1. Потреба об'єктно-орієнтованого програмування 233

11.1.1. Процедурні мови програмування 233

11.1.2. Поділ програми на функції 233

11.1.3. Недоліки структурного програмування 234

11.1.4. Неконтрольований доступ до даних 234

11.1.5. Відображення картини реального світу 236

11.2. Поняття про об'єктно-орієнтований підхід 236

11.2.1. Виробнича аналогія 237

11.2.2. ООП – спосіб ефективної організації програми 238

11.3. Основні компоненти об'єктно-орієнтованої мови програмування 238

11.3.1. Поділ програми на об'єкти 238

11.3.2. Визначення класу 239

11.3.3. Поняття про успадкування в класах 240

11.3.4. Повторне використання коду 241

11.3.5. Поняття про типи даних користувача 241

11.3.6. Поняття про поліморфізм і перевантаження операторів 241

11.4. Співвідношення між мовами програмування C і С++ 241

11.5. Вивчення основ створення об'єктно-орієнтованих програм 242

11.6. Поняття про універсальну мову моделювання 243

Розділ 12. Введення в класи 245

12.1. Базові поняття класу 245

12.2. Конструктори і деструктори 249

12.2.1. Параметризовані конструктори 252

12.2.2. Альтернативний варіант ініціалізації членів-даних об'єкта 255

12.3. Доступ до членів класу 256

12.4. Класи і структури – споріднені типи 258

12.5. Об'єднання і класи – споріднені типи 260

12.6. Вбудовувані функції 261

12.7. Створення масивів об'єктів 264

12.8. Покажчики на об'єкти 267

Розділ 13. Робота з класами 270

13.1. Поняття про функції-"друзі" класу 270

13.2. Перевантаження конструкторів 274

13.3. Динамічна ініціалізація конструктора 275

13.4. Присвоєння об'єктів 277

13.5. Передача об'єктів функціям 279

13.5.1. Конструктори, деструктори і передача об'єктів 279

13.5.2. Потенційні проблеми під час передачі параметрів 281

13.6. Повернення об'єктів функціями 283

13.7. Створення і використання конструктора копії 286

13.7.1. Використання конструктора копії для ініціалізації одного об'єкта іншим 287

13.7.2. Використання конструктора копії для передачі об'єкта функції 288

13.7.3. Використання конструктора копії під час повернення функцією об'єкта 290

13.7.4. Конструктори копії – а чи не можна знайти щось простіше? 290

13.8. Ключове слово this 291

Розділ 14. Перевантаження операторів 293

14.1. Перевантаження операторів з використанням функцій-членів класу 293

14.1.2. Використання функцій-членів класу для перевантаження бінарних операторів додавання "+" і присвоєння "=" 293

14.1.2. Використання функцій-членів класу для перевантаження унарних операторів інкремента "++" та декремента "--" 296

14.1.3. Особливості реалізації механізму перевантаження операторів 301

14.1.4. Значення порядку слідування операндів 302

14.2. Перевантаження операторів з використанням функцій-не членів класу 303

14.2.1. Використання функцій-"друзів" класу для перевантаження бінарних операторів 303

14.2.2. Використання функцій-"друзів" класу для перевантаження унарних операторів 307

14.2.3. Перевантаження операторів відношення та логічних операторів 310

14.3. Особливості реалізації оператора присвоєння 311

14.4. Перевантаження оператора індексації масивів ([]) 314

14.5. Перевантаження оператора "()" 317

14.6. Перевантаження інших операторів 318

14.6.1. Приклад перевантаження операторів класу рядків 319

Розділ 15. Успадкування в класах 324

15.1. Поняття про успадкування 324

15.2. Керування доступом до членів базового класу 327

15.3. Використання захищених членів класу 329

15.3.1. Використання специфікатора доступу protected для надання членам класу статусу захищеності 330

15.3.2. Використання специфікатора protected для успадкування базового класу 333

15.3.3. Узагальнення інформації про використання специфікаторів public, protected і private 334

15.4. Успадкування декількох базових класів 335

15.5. Використання конструкторів і деструкторів під час реалізації механізму успадкування 336

15.5.1. Прядок виконання конструкторів і деструкторів 336

15.5.2. Передача параметрів конструкторам базового класу 339

15.6. Повернення успадкованим членам початкової специфікації доступу 342

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

15.8. Читання С++-графів успадкування 347

Розділ 16. Віртуальні функції та поліморфізм 349

16.1. Покажчики на похідні типи – підтримка динамічного поліморфізму 349

16.2. Віртуальні функції 352

16.2.1. Поняття про віртуальні функції 352

16.2.2. Успадкування віртуальних функцій 354

16.2.3. Потреба у застосуванні віртуальних функцій 356

16.2.4. Приклад застосування віртуальних функцій 357

16.2.5. Суто віртуальні функції та абстрактні класи 360

16.2.6. Порівняння раннього зв'язування з пізнім 362

16.2.7. Поняття про поліморфізм і пуризм 362

Розділ 17. Шаблони в класах 364