67368

Потоки. Класи потоків С++

Лекция

Информатика, кибернетика и программирование

На сьогодні існують дві версії бібліотеки об'єктно-орієнтованого введення-виведення даних, причому обидві широко використовуються програмістами: стара, що базується на оригінальних специфікаціях мови C, і нова – визначається стандартом мови програмування C++.

Украинкский

2014-09-07

177.5 KB

4 чел.

Лекція № 26

Тема: Потоки. Класи потоків С++

План

1. Порівняння C- та С++-систем введення-виведення

2. Поняття "потоків" у мові програмування C++

3. Файлові С++-потоки

4. Вбудовані С++-потоки

5. Класи потоків

  1.  Порівняння C- та С++-систем введення-виведення

   На сьогодні існують дві версії бібліотеки об'єктно-орієнтованого введення-виведення даних, причому обидві широко використовуються програмістами: стара, що базується на оригінальних специфікаціях мови C, і нова – визначається стандартом мови програмування C++. Стара бібліотека введення-виведення даних підтримується за рахунок заголовного файлу <iostream.h>, а нова – за допомогою заголовка <iostream>. Нова бібліотека введення-виведення даних загалом є оновленою і вдосконаленою версією старої. Основна відмінність між ними полягає в механізмі реалізації засобів введення-виведення потокової інформації, а не

у тому, як їх потрібно використовувати.

    З погляду програміста, є дві істотні відмінності між старою С- і новою С++-бібліотеками введення-виведення. По-перше, нова бібліотека містить ряд додаткових засобів і визначає декілька нових типів даних. Тому нову бібліотеку С++-системи введення-виведення можна вважати надбудовою над старою С-системою.

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

 

  1.  Поняття "потоків" у мові програмування C++

   Принциповим для розуміння С++-системи введення-виведення є те, що вона базується на понятті "потоку". Потік (stream) – це загальний логічний інтерфейс з різними пристроями, з яких складається комп'ютер. Потік або синтезує інформацію, або споживає її, після чого зв'язується з будь-яким фізичним пристроєм за допомогою С++-системи введення-виведення. Характер поведінки всіх потоків є однаковим, незважаючи на різні фізичні пристрої, з якими вони пов'язуються. Оскільки різні потоки діють однаково, то практично до всіх типів пристроїв можна застосувати одні і ті ж самі функції та оператори введення-виведення. Наприклад, методи, що використовуються для виведення даних на екран, також можна використовувати для виведення їх на друкувальний пристрій або для запису у дисковий файл.

  1.  Файлові С++-потоки

   У загальному випадку потік можна назвати логічним інтерфейсом з файлом. У мові програмування С++ до терміну "файл" належать дискові файли, екран монітора, клавіатура, порти, файли на магнітній стрічці й ін. Хоча файли між собою відрізняються за формою і можливостями представлення, проте робота з різними потоками інформації є однаковою. Перевага цього підходу (з погляду програміста) полягає у тому, що один пристрій комп'ютера може бути подібним до будь-якого іншого. Це означає, що потік забезпечує інтерфейс, який узгоджується зі всіма пристроями.

    Існує два типи потоків: текстовий і двійковий. Текстовий потік використовують для введення-виведення символів. При цьому можуть відбуватися деякі перетворення символів. Наприклад, під час виведення символ нового рядка може перетворюватися у послідовність символів: повернення каретки і переходу на новий рядок. Тому часто не буває взаємно-однозначної відповідності між тим, що посилається у потік, і тим, що насправді записується у файл. Двійковий потік можна використовувати з даними будь-якого типу, причому у цьому випадку ніякого перетворення символів не здійснюється, тобто між тим, що посилається у потік, і тим, що потім реально міститься у файлі, існує взаємно-однозначна відповідність.

    Розглядаючи потоки, необхідно розуміти, що вкладається у поняття "поточної позиції". Наприклад, якщо довжина файлу дорівнює 100 байтів, і відомо, що вже прочитано його половину, то наступна операція зчитування почнеться на 50-му байті, який у цьому випадку і є поточною позицією.

    Отже, у мові програмування C++ механізм введення-виведення потокової інформації функціонує з використанням логічного інтерфейсу, який називається потоком. Всі потоки мають аналогічні властивості, які дають змогу використовувати однакові функції введення-виведення, незалежно від того, з файлом якого типу існує зв'язок. Під файлом розуміють реальний фізичний пристрій, який містить дані. Якщо файли можуть відрізнятися між собою, то потоки – ні. Водночас, якщо деякі пристрої можуть не підтримувати всі операції введення-виведення даних (наприклад, операції з довільною вибіркою), то і пов'язані з ними потоки теж не підтримуватимуть ці операції.

  1.  Вбудовані С++-потоки

   У мові програмування C++ міститься ряд вбудованих однобайтових (8-бітових) потоків (cin, cout, cerr і clog), які автоматично відкриваються, як тільки програма починає виконуватися. Як уже зазначалося вище, cin – це стандартний вхідний, а cout – стандартний вихідний потік. Потоки cerr і clog (вони призначені для виведення інформації про помилки) також пов'язані із стандартним виведенням даних. Різниця між ними полягає у тому, що потік clog є буферизованим, а потік cerr – ні. Це означає, що будь-які вихідні дані, послані у потік cerr, будуть негайно виведені на екран, а при використанні потоку clog дані спочатку записуються в буфер, а реальне їх виведення починається тільки тоді, коли буфер повністю заповнено.        Зазвичай потоки cerr і clog використовують для виведення інформації на екран про стан відлагодження програми або її помилки.

    У мові програмування C++ також передбачено двобайтові (16-бітові) символьні версії стандартних потоків, що іменуються wcin, wcout, wcerr і wclog. Вони призначені для підтримки таких мов як китайська, японська та інших східноазійських, для представлення яких потрібні великі символьні набори. У цьому навчальному матеріалі двобайтові стандартні потоки не розглядаються.

    За замовчуванням стандартні С++-потоки зв'язуються з монітором, але програмним способом їх можна перенаправити на інші зовнішні пристрої або дискові файли. Перенаправлення може також виконати сама операційна система.

  1.  Класи потоків

    Як було зазначено вище, С++-система введення-виведення використовує заголовок <iostream>, у якому для підтримки операцій введення-виведення даних визначено достатньо складну ієрархію класів. Ця ієрархія починається з системи шаблонних класів. Шаблонний клас визначає зміст виконуваних дій, не задаючи у повному обсязі типи даних, які він повинен обробляти. Маючи шаблонний клас, можна створювати його конкретні примірники. Для бібліотеки введення-виведення стандарт мови програмування C++ створює дві спеціалізації шаблонних класів: одну для 8-, а іншу для 16-бітових ("широких") символів. Найчастіше використовуються шаблонні класи для 8-бітових символів.

    С++-система введення-виведення побудована на двох взаємопов'язаних, але різних ієрархіях шаблонних класів. Перша ієрархія виведена з класу низькорівневого введення-виведення basic_streambuf. Цей клас підтримує базові низькорівневі операції введення та виведення і забезпечує підтримку всієї С++-системи введення-виведення. Якщо Ви не плануєте займатися програмуванням спеціалізованих операцій введення-виведення даних, то Вам навряд чи доведеться використовувати безпосередньо клас basic_streambuf. Друга ієрархія класів, з якою С++-програмістам доводиться працювати безпосередньо, виведена з класу basic_ios. Це – клас високорівневого введення-виведення, який забезпечує форматування даних, контроль помилок і надає статусну інформацію, пов'язану з потоками введення-виведення. Клас basic_ios використовується як базовий для декількох похідних від нього класів, у т.ч. класів basic_istream, basic_ostream і basic_iostream. Ці класи використовуються для створення потоків, призначених для окремого введення та виведення даних і їх одночасного введення-виведення.

   Як уже зазначалося вище, бібліотека введення-виведення даних створює дві спеціалізовані ієрархії шаблонних класів: одну для 8-, а іншу для 16-бітових символів. У табл. 9.1 наведено перелік імен шаблонних класів і відповідних їм "символьних" версій.


 

А также другие работы, которые могут Вас заинтересовать

48254. Анатомія та фізіологія людини 9.73 MB
  Знання будови тіла людини і пізнання сутності життєвих процесів на різних рівнях організації організму здавна цікавили учених-біологів, філософів та широкі верстви населення. Основними стимулами для розвитку цих знань були практичні потреби життя людей, зокрема потреби медицини. Потрібно було багато століть для того, щоб людство прийшло до сучасного рівня знань у таких галузях науки, як анатомія, фізіологія та гігієна людини.
48255. Господарське право. Курс лекцій. О.М. Вінник 1.84 MB
  У пропонованому курсі лекцій на підставі аналізу нормативно-правових актів. висвітлюються основні теми та інститути господарського права - як загальної частини (поняття господарського права, господарські правовідносини, господарське законодавство, субєкти господарських правовідносин, майнова основа господарювання, господарські зобовязання, господарсько-правова відповідальність, антимонополь-но-конкурентне регулювання, правове регулювання банкрутства), так і спеціальної частини (особливості правового регулювання певних видів господарських відносин: у сфері капітального будівництва, інноваційної, фінансової та біржової діяльності, агентських відносин, комерційної концесії, зовнішньоекономічної діяльності, іноземного інвестування, спеціальних режимів господарювання).
48256. ПЕДАГОГІКА. КОНСПЕКТ ЛЕКЦІЙ 1.93 MB
  Виховання у вузькому педагогічному значенні цілеспрямована виховна діяльність педагога з метою досягнення конкретної мети в колективі учнів. Навчання – процес керівництва пізнавальною діяльністю учнів засвоєнням ними знань умінь і навичок. Воно завжди має двосторонній характер включає в себе і діяльність педагога викладання пояснення інструктування і діяльність учнів учіння засвоєння. Педагог учитель викладач інструктор викладає учням навчальний матеріал спонукає їх до учіння спрямовує й організовує їх пізнавальну...
48257. ЭНЕРГЕТИЧЕСКИЙ ОБМЕН 83 KB
  Мультиферментные комплексы примеры биологическая роль. Микросомальная система оксидоредуктаз ее биологическая роль. Понятие биологическая роль. Роль кислорода.
48258. ОСОБЛИВОСТІ ПОБУДОВИ ПЛАНУ РАХУНКІВ НБУ 1.51 MB
  Перший її рівень представляє Національний банк України який відіграє роль центрального банку з характерними лише для нього функціями та операціями. Виходячи з цього Національним банком України розроблено два Плани рахунків: один для установ Національного банку України другий для комерційних банків. Безперервність діяльності банку вважається що банк постійно функціонує і продовжуватиме свою діяльність у майбутньому. Якщо реальна вартість продажу менша ніж залишкова вартість первісна вартість за мінусом зносу банку необхідно врахувати...
48259. Ідейно-теоретичні концепції свободи преси 892.5 KB
  Основні принципи авторитаризму – контроль регламентація та використання засобів масової комунікації. У цих рисах німецька нацистська журналістика дуже схожа з радянською тоталітарною системою масової комунікації тому її можна визначити як перехідну модель журналістики між авторитарною та тоталітарною системами журналістики. Саме суди визначають межі втручання влади у сферу масової комунікації. Тут не вистачає специфіки комунікації як творчого процесу бо з одного боку визначення надто широке телевізор телефон наприклад теж можна...
48260. Феномен університетської освіти у історичному вимірі 945.5 KB
  В XI столітті XII столітті були засновані: Болонський університет 1088 Болонський університет найстаріший університет Європи в місті Болонья Північна Італія заснований в 1088 році як юридичний навчальний заклад. Заснований Університет Історія 9 століття Салерно Італія Медичний факультет; статус університету під сумнівом кінець 11 століття Болонья Італія Точна дата заснування не відома; офіційний рік заснування 1088; В кінці 11 століття існувала школа права; поступовий розвиток в університет 13 століття Заснований Університет...
48261. Літературознавство як наука 224 KB
  Автор будьякого художнього твору завжди репрезентує певний культурний прошарок своєї доби спостерігаючи яку беручи участь в її житті він водночас представляє певний ідеологічний або політичний напрям. Щоб розібратися в задумі письменника в політичній спрямованості його твору чи творчості треба знати основні факти біографії митця його зв'язки з іншими людьми участь у політичному і громадському житті. Вужчим за науковим обсягом вважаються так звані допоміжні галузі літературознавства – бібліографія археологія текстологія методика...
48262. Уголовно-процессуальное право 108.76 KB
  Структурно уголовно-процессуальное право распадается на части; Общую и Особенную. Деление это носит двойственный характер. С одной стороны, оно отражает специфику структуры Уголовно-процессуального кодекса, что уже понятия уголовно-процессуального права. С другой стороны, такая дифференциация оправдана методологически.