Тема 29. Потоки вводу і виводу PDF
Document Details
Uploaded by TimeHonoredVector2117
Tags
Summary
Цей документ детально описує потоки вводу/виводу в мові програмування C++. Він пояснює концепції та ієрархію класів, пов'язаних із вводом і виводом даних. Також наведено приклади роботи з цими потоками, використовуючи стандартні елементи мови.
Full Transcript
Тема 29. Потоки вводу і виводу Функціонал потоків вводу/виводу не визначений як частина мови C++, а надається Стандартною бібліотекою C++ (і знаходиться в просторі імен std). У попередніх темах ми підключали заголовковий файл бібліотеки iostream і використовували об’єкти cin і cout для простого ввод...
Тема 29. Потоки вводу і виводу Функціонал потоків вводу/виводу не визначений як частина мови C++, а надається Стандартною бібліотекою C++ (і знаходиться в просторі імен std). У попередніх темах ми підключали заголовковий файл бібліотеки iostream і використовували об’єкти cin і cout для простого вводу та виводу даних. У цій темі ми детально розглянемо бібліотеку iostream. Бібліотека iostream При підключенні заголовку iostream, ми отримуємо доступ до всієї ієрархії класів бібліотеки iostream, які відповідають за функціонал вводу/виводу даних (включаючи клас, який називається iostream). Ієрархія цих класів виглядає приблизно наступним чином: Перше, що ви можете помітити в цій ієрархії — множинне спадкування (те, що насправді не рекомендується використовувати). Проте, бібліотека iostream була розроблена і ретельно протестована відповідним чином, щоб уникнути типових помилок, які виникають при роботі з множинним спадкуванням, тому ви можете спокійно використовувати цю бібліотеку. Потоки в С++ Друге, що ви могли б помітити — це часте використання слова «stream» (тобто «потік»). По суті, ввід/вивід в мові C++ реалізований за допомогою потоків. Абстрактно, потік — це послідовність символів, до яких можна отримати доступ. З часом потік може надавати або споживати потенційно необмежені обсяги даних. Ми матимемо справу з двома типами потоків: Потік вводу (або «вхідний потік») використовується для зберігання даних, отриманих від джерела даних: клавіатури, файлу, мережі тощо. Наприклад, користувач може натиснути клавішу на клавіатурі в той час, коли програма не очікує вводу. Замість ігнорування натискання клавіші, дані поміщаються у вхідний потік, де потім очікують відповіді від програми. Потік виводу (або «вихідний потік») використовується для зберігання даних, наданих конкретному споживачеві даних: монітору, файлу, принтеру тощо. При запису даних на пристрій виводу, цей пристрій може бути не готовим прийняти дані негайно. Наприклад, принтер все ще може прогріватися, коли програма вже записує дані в вихідний потік. Таким чином, дані перебуватимуть в потоці виводу до тих пір, поки принтер не почне їх використовувати. Деякі пристрої, такі як файли і мережі, можуть бути джерелами як вводу, так і виводу даних. Гарна новина полягає в тому, що програмісту не потрібно знати деталі взаємодії потоків з різними пристроями і джерелами даних, йому потрібно тільки навчитися взаємодіяти з цими потоками для читання і запису даних. Ввід/вивід в C++ Хоча клас ios є дочірнім класу ios_base, дуже часто саме цей клас буде найбільш батьківським класом, з яким ви працюватимете/взаємодіятимете напряму. Клас ios визначає купу різних речей, які є загальними для потоків вводу/виводу. Клас istream використовується для роботи з вхідними потоками. Оператор вилучення >> використовується для вилучення значень з потоку. В цьому є сенс: коли користувач натискає на клавішу клавіатури, код цієї клавіші поміщається у вхідний потік. Потім програма витягує це значення з потоку і використовує його. Клас ostream використовується для роботи з вихідними потоками. Оператор вставки > nAge; if (nAge