КАТЕГОРИИ: Архитектура-(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 имеет четыре предопределенных объекта-потока. Они ассоциированы со стандартным вводом/выводом. Эти объекты описаны в следующей таблице.
Библиотека потоков С++ предусматривает два основных класса для ввода и вывода: соответственно 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; Просмотров: 424; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |