Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Операции помещения и извлечения




Предопределенные объекты-потоки

Заголовочные файлы

Лекция 23

23. 1 Классы потоков языка С++

 

Библиотека потоков С++ (библиотека iostream) представляет набор классов для управления вводом/выводом. Эти классы имеют несколько преимуществ по сравнению с традиционными средствами ввода/вывода (i/o):

· Надежность. Семейства функций printf и scanf не предусматривают никакой проверки типа. Компилятор не может сигнализировать о несоответствии спецификаций формата передаваемым аргументам. Механизм потоков С++ основывается на перегрузке функций (операций), что обеспечивает для каждого типа передаваемых данных вызов соответствующей функции.

· Расширяемость. Применение процедур С ограничено файловыми потоками (и некоторыми устройствами, доступ к которым возможен как к предопределенным потокам). Эти процедуры допускают расширения. Классы С++, благодаря полиморфизму, позволяют одним и тем же процедурам работать с потоками различных типов. Например, тот же интерфейс, что используется стандартным вводом/выводом, применим к файловым и резидентным потокам. Можно предусмотреть собственные перегруженные функции, которые позволят библиотеке потоков С++ работать с определяемыми пользователем типами.

· Простота и последовательность. Широкое использование перегруженных функций позволяет библиотеке потоков поддерживать единообразный интерфейс ввода/вывода. Это приводит к более простому и понятному синтаксису.

 

 

 

Чтобы обеспечить программе доступ к библиотекам потоков С++, нужно включить в нее заголовочный файл iostream.h. При файловом вводе/выводе следует включить также fstream.h и iomanip.h (манипуляторы).

 

Библиотека iostream имеет четыре предопределенных объекта-потока. Они ассоциированы со стандартным вводом/выводом. Эти объекты описаны в следующей таблице.

 

Имя Тип класса Описание
cin istream_withassign Ассоциируется со стандартным вводом (т.е. клавиатурой)
cout ostream_withassign Ассоциируется со стандартным выводом (т.е. экраном)
ctrr ostream_withassign Ассоциируется со стандартным устройством для вывода ошибок (т.е. экраном) с небуферизованным выводом
clog ostream_withassign Ассоциируется со стандартным устройством для вывода ошибок (т.е. экраном) с буферизованным выводом

 

 

Библиотека потоков С++ предусматривает два основных класса для ввода и вывода: соответственно istream и ostream. Класс ostream использует для вывода операцию левого сдвига(<<). Если эта операция применяется к объектам-потокам, ее называют операцией помещения (в поток). Следующий пример выводит приветствие, применяя операцию помещения к предопределенному объекту cout.

 

#include<iostream.h>

void main(0

{

cout<<”Всем привет!” <<’\n’;

}

 

После приветствия стоит символ перевода на новую строку ‘\n’.

Класс istream использует для ввода операцию правого сдвига (>>). В таком контексте ее часто называют операцией извлечения (из потока). Следующий пример применяет операцию извлечения к предопределенному объекту cin.

 

#include<iostream.h>

void main(0

{

char name [20]];

cout<<”Введите имя”;

cin >>name;

}

 

Классы istream и ostream перегружают соответственно операции извлечения и помещения для всех встроенных типов. Такая перегрузка позволяет использовать единообразный синтаксис для ввода/вывода символов, строк, целых и вещественных типов.

Кроме того, перегруженные операции << и >> возвращают ссылку на объект (return*this) соответствующего типа. Это позволяет последовательно соединять несколько операций, т.е. реализовать сцепление вызовов операций ввода/вывода.

Например:

cout<<”Введите а,в,с” <<’\n’;

cin >>а>>в>>с;

cout<<”Вы ввели: а=”<<a<<” в=”<<в<<” c=”<<c<<’\n’;

В этом фрагменте программы приведены сцепленные операции ввода и вывода.

В следующей программе приведены примеры перегруженных операций для встроенных типов.

 

#include<iostream.h>

#include<iomanip.h>

void main(0

{

int k;

cout<<”Введите k=” <<’\n’;

cin >>k;

long m;

cout<<”Введите m=” <<’\n’;

cin >>m;

float x;

cout<<”Введите x=” <<’\n’;

cin >>x;

double y;

cout<<”Введите y=” <<’\n’;

cin >>y;

char nch;

cout<<”Введите символ nch =” <<endl;/*endl – т.н. манипулятор. Он помещает в поток символ новой строки (\n) и вызывает манипулятор flush, который принудительно записывает все данные на соответствующие физические устройства. Поэтому endl рекомендуется ставить перед вводом символа и строки */

cin >> nch;

char name [15];

cout<<”Введите name =” <<endl;

cin >> name;

cout<<”Вы ввели: k=”<<k<<” m=”<<m<<” x=”<<x<< y=”<<y<< nch=”<<nch<< name =”<< name <<’\n’;

}

 

 




Поделиться с друзьями:


Дата добавления: 2015-06-27; Просмотров: 399; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.