67368

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

Лекция

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

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

Украинкский

2014-09-07

177.5 KB

12 чел.

Лекція № 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 наведено перелік імен шаблонних класів і відповідних їм "символьних" версій.


 

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

29261. Элитарная и массовая культура 36.5 KB
  Когда уровень образования населения растет круг потребителей высокой культуры расширяется. Одни и те же виды искусства могут принадлежать высокой и массовой культуре: классическая музыка высокой а популярная музыка массовой фильмы Феллини высокой а боевики массовой картины Пикассо высокой а лубок массовой. Однако существуют такие жанры литературы в частности фантастика детективы и комиксы которые всегда относят к популярной или массовой культуре но никогда к высокой. Органная месса Баха относится к высокой культуре но...
29262. Немецкий философ Карл Ясперс 40.5 KB
  Он также отвергал и материалистическое толкование истории марксизмом утверждая что в истории культуры значительную роль играют не экономические факторы а духовные. Марксом Ясперс отстаивает приоритет духовной составляющей в истории культуры а в полемике со Шпенглером утверждает ее единство. Таким образом Ясперс возвращается к линейной схеме истории культуры. Рисуя схему мировой истории К.
29263. Ментальность как ядро культурно-исторического типа 31.5 KB
  Культурные картины мира. КАРТИНА МИРА система интуитивных представлений о реальности. Каждому отрезку исторического времени соответствует своя картина мира. Можно выделить универсальную картину мира свойственную всему человечеству.
29264. Межкультурные коммуникации 35.5 KB
  Необходимыми условиями и структурными компонентами социокультурной коммуникации является наличие общего языка у субъектов коммуникации каналов передачи информации правил осуществления коммуникации семиотических этических. Однако собственно коммуникативными являются лишь действия осуществляемые со специальной целью коммуникации т. По его мнению все участники коммуникации ориентируются на обобщенные интерсубъективно понятые нормы коммуникации что в совокупности с коммуникативной компетентностью и наличием рациональных мотивов делает...
29265. Конфуцианско-даосский тип культуры 36.5 KB
  Первая её основа учения Конфуция а вторая даосизм учение даосов а также буддизм но он отличается от индийского. Конфуцианство учение Конфуция китайского мудреца он жил в VIV веках до н. Конфуций создал учение об идеальном человеке учение о благородном муже он должен быть гуманным милосердным почтительным честным и т. Таким образом конфуцианство это скорее этическое учение чем религия но это учение и о государстве .
29266. Культура Нового времени 98.5 KB
  Кагану КУЛЬТУРА XVII века Европейская история культуры основана на античном городеполисе на полисном генотипе. На этой основе сложились характерные черты буржуазной культуры: Антропоцентрический характер культуры в основе которого мысль древнегреческого философа Протагора Человек есть мера всех вещей. Личностная свобода помается как исходный символ и становится основной ценностью западной культуры. Инновационный инновация нововведение характер культуры: общая ориентация на изменение привычного образа мыслей.
29267. КУЛЬТУРА И ПРИРОДА (по М.С.Кагану) 36 KB
  Маркс: обмен веществ между человеком и природой; практическидуховный отношения которые складываются в обыденном сознании людей в их повседневной жизни выражаются в фантастическом преобразовании реального мира и опредмечиваются в мифологии религии искусстве; духовнотеоретический отношения которые выражаются ав познании законов природы и получают наивысшее выражение в науках о природе и бв ценностном осмыслении природы которое разрабатывается в сфере идеологии. Сферами проявления взаимоотношений культуры и природы можно...
29268. НОРМА КУЛЬТУРНАЯ 30 KB
  Различают нормы общечеловеческие национальные классовые групповые межиндивидуальные. Нормы отличаются друг от друга по уровню обязательности выполнения по степени свободы их выбора. Существуют нормы обязательность которых однозначна и определенна вплоть до применения строгих санкций выполнение правовых норм норм технической деятельности на индустриальном производстве и др. Действие любой нормы не абсолютно; норма переживает период зарождения утверждения потом теряет стабильность начинает разрушаться.
29269. КУЛЬТУРОГЕНЕЗ 27.5 KB
  Сущность культурогенеза заключается в процессе постоянного самообновления культуры не только методом трансформационной изменчивости уже существующих форм и систем но и путем возникновения новых феноменов не существовавших в культуре ранее. Культурогенез не является однократным событием происхождения культуры в эпоху первобытной древности человечества но есть процесс постоянного порождения новых культурных форм и систем. С позиций эволюционной теории основной причиной культурогенеза является необходимость в адаптации человеческих сообществ к...