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


 

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

45709. Основные тенденции развития СМИ на Западе после Второй мировой войны (Англия) 50.5 KB
  1870 - соглашение Вольф Гавас и Рейтер о разделе мирового инф пространства 6080 новые типы период изданий много вечерн г “Pll Mll Gzette†“London Dily Mercury†“evening Mercury†“Evening news†“Strâ€. Особенно преуспели в этом идеологи английской желтой прессы братья Хармсворты начавшие свою деятельность в 1888 году с издания желтых журналов а затем газет Evening News 1894 Dily Mil 1896 для молодых клерков снизили цену увеличил тираж. Газетн кампании рубрики для женщин и Dily Mirror1903 ...
45710. Международная информация 36.5 KB
  Тема раскрывается в трех измерениях: во-первых освещение в России любыми СМИ любым информационным источником и в любом жанре происходящих за рубежом текущих событий и процессов; внешнеполитических и внешнеэкономических акций России; российского присутствия за рубежом политического экономического культурного гуманитарного информационного спортивного военного. во-вторых отражение зарубежными СМИ образа России ее внутренней и внешней политики; в-третьих целенаправленные действия российской стороны в зарубежных странах для...
45711. Зарубежная журналистика и экономика: новость как товар, аудитория как капитал 28 KB
  Поскольку СМИ включены в действующую финансовоэкономическую систему той или иной страны они заинтересованы в стабильности и развитии этой системы что часто проявляется в содержании публикуемых или транслируемых материалов. В ряде случаев СМИ выступают как группы экономических интересов а во взаимодействии с властными структурами как группы влияния лобби. В последние годы заметно меняется экономическая структура СМИ. Во многих странах государство субсидирует СМИ как прямо так и косвенно предоставлением различных льгот грантов...
45712. Зарубежные теории и концепции журналистики 37.5 KB
  Известные американские теоретики и историки печати профессоры Иллинойского университета Фред Сиберт Теодор Петерсон и руководитель проекта профессор Стэнфордского университета Уилбур Шрамм подготовили и издали книгу Четыре теории прессы которая долгое время рассматривалась за рубежом как классическая работа. В каждой из четырех анализируемых авторами теорий проблема ответственности прессы находила свое решение в соответствии с теми социальными и политическими структурами в рамках которых функционировали СМИ. Теория свободы печати...
45713. Методика социологических исследований журналистики 29 KB
  Методика социологических исследований журналистики. Социология журналистики это дисциплина изучающая 1 журналистику как социнститут ее место и значение в системе общ отношений и в соц структуре; 2 журку как средство общения и взаимодействия м у людьми изучение личности журналиста приемов и механизмов манипуляций пропаганды воздействия СМИ на личность. Подходы к изучению журки: 1журка как объект изучения изучают не журты а со стороны и 2Журка как субъект исследования журты являются исследователями Методы сбора информации.
45714. Правовое регулирование журналистской деятельности 36.5 KB
  Идеологический плюрализм в России; Статья 14 религиозный плюрализм никакая религия не может быть признана государственной или официальной; Статья 15 приоритет международного над национальным правом; Статья 23 право на неприкосновенность частной жизни личную и семейную тайну защиту своей чести и доброго имени. Частная жизнь особая сфера бытовых и интимных отношений человека не подлежащая контролю со стороны государства и общества; Статья 41 ответственность...
45715. Политическая журналистика в современной России 36.5 KB
  Вскоре информационные империи обоих олигархов пополнились общефедеральными телеканалами: бывшим Первым каналом после реформирования получившим название ОРТ и вновь созданным на четвертой кнопке НТВ. Передовые информационные технологии позаимствованные за рубежом и успешно адаптированные к отечественным условиям энтузиазм и талант журналистов помноженные на деньги владельца обусловили тот факт что последующие несколько лет вошли в историю российской журналистики как эпоха первого НТВ. Неверно однако было бы рассматривать первое...
45716. Этическое регулирование журналистской деятельности 46 KB
  Существует 2 основных критерия выделения профессиональной этики: 1 применение ПЭ в условиях конкретной профессии на основе общих норм нравственности 2 ПЭ существует лишь в тех профессиях которые непосредственно воздействуют на человека. Положения профессиональной морали зафиксированы в ряде кодексов. В любой стране есть свой кодекс профессиональной этики журналиста но все они так или иначе повторяют одни и те же положения. В СССР Союз журналистов появился в 1957году в 1988 создан Совет по профессиональной этике...
45717. Социальные функции журналистики 38.5 KB
  Социальные функции журналистики Корконосенко разделяет социальные роли и социальные функции журналистики. РОЛИ Сущность ролевой характеристики заключается в выполнении ряда соц. Ролевая характеристика строится в зависимости от количества и качественных особенностей сфер жизни в которые проникает журналистика социетальных систем практически во все. Это: экономическая политическая духовноидеологическая и социальная.