Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Потоковый ввод

Потоковый вывод

Стандартные потоки cin, cout и cerr

Стандартным потокам языка С stdin, stdout и stderr, объявленным в файле STDIO.H, в С++ соответствуют объекты-потоки cin, cout, cerr и clog, подключаемые посредством файла IOSTREAM.H.

cin объект класса istream, связанный со стандартным потоком ввода

cout объект класса ostream, связанный со стандартным потоком вывода

cerr объект класса ostream, не поддерживающий буферизацию и связанный со стандартным потоком ошибок

clog объект класса ostream, поддерживающий буферизацию и связанный со стандартным потоком ошибок

Потоковый вывод выполняется с помощью операции включения (или помещения)<<. Стандартная операция сдвига влево << для операций вывода переопределяется. Ее левый операнд - это объект типа ostream, а правый операция может иметь любой стандартный тип, т.к. оператор << перегружен таким образом, чтобы поддерживать все стандартные типы данных. Операция << ассоциируется слева направо и возвращает ссылку на объект ostream, для которого она вызывается. Это позволяет выполнять каскад операций. Пример:

printf(“ Целое число:%d,число с плавающей точкой: %f”,i,f);

заменяется в С++ на

cout<<”Целое число:”<<i<<”,число с плавающей точкой: ”<<f;

Оператор << самостоятельно анализирует тип данных и выбирает формат их представления.

Самостоятельная проработка:

Перегрузка оператора <<

Допускается перегружать данный оператор. Прямым следствием перегрузки является возможность расширения операторов << и>> для обработки данных нестандартных типов. Ниже показано, как перегрузить оператор вывода, чтобы он мог принимать данные нового типа tclient:

struct tclient {char pszname[25]; char pszaddress[30];int pszphone;}

ostream& operator << (ostream& osout, tclient client)

{ osout<<” “<< client.pszname;

osout<<” “<< client.pszaddress;

osout<<” “<< client.pszphone;

}

Теперь для вывода содержимого структуры client необходимо задать следующий оператор:

cout<<client;

Эффективность операторов << и >> объясняется компактностью их программного кода.

Потоковый ввод использует переопределенную операцию сдвига вправо, >>, и называется операцией извлечения, или извлечением. Левый операнд операции >> представляет собой объект типа класса istream. Как и для вывода, правый операнд может быть любого типа, для которого определен вывод потоком.

Пример:

scanf(“%d%f%c”,&i,&f,&c);

заменяется на

cin>>i>>f>>c;

Нет необходимости при вводе данных ставить перед именами переменных оператор взятия адреса &,т.к. в С++ оператор >> вычисляет адрес, определяет формат и прочие особенности записи значения переменной.

Рассмотрим еще один пример:

int i; double d; cin >> i >> d;

Последняя строка вызывает пропуск пробельных символов. Цифры, считываемые со стандартного устройства ввода (по умолчанию это клавиатура), преобразуются затем во внутренний двоичный формат и записываются в переменную i. Затем снова пропускаются пробельные символы, и наконец считывается число с плавающей точкой, которое преобразуется и записывается в переменную d.

Для типа char* (рассматриваемого как строка) действие операции >> состоит в пропуске пробельных символов и записи следующих (не пробельных) символов до тех пор, пока не встретится следующий пробельный символ. Затем добавляется завершающий нулевой (0) символ.

Для типа char (signed или unsigned) действие операции >> состоит в пропуске пробельных символов и записи следующего (не пробельного) символа.

Самостоятельная проработка:

 

Перегрузка оператора >>

Вы можете создавать извлечения для определенных вами типов таким же образом, как это делается со вставками. Используя информацию о структуре, определенной выше, операция >> может быть перегружена следующим образом:

struct info{char name; int val; float units;}

istream& operator >> (istream& s, info& m);

{

s >> m.name >> m.val >> m.units;

return s;

}

В реальных прикладных программах, разумеется, вы можете добавить коды для проверки ошибок ввода. Для считывания строки ввода, такой как "capacity 1.25 liters", можно использовать следующую запись:

cin >> m;

Пример:

struct tclient {char pszname[25]; char pszaddress[30];int pszphone;}

istream& operator >> (istream& isin, tclient client)

{ isin>>client.pszname;

isin>>client.pszaddress;

isin>>client.pszphone;

}

<== предыдущая лекция | следующая лекция ==>
Функции построчного ввода-вывод | Примерное распределение учебного времени
Поделиться с друзьями:


Дата добавления: 2014-01-15; Просмотров: 425; Нарушение авторских прав?; Мы поможем в написании вашей работы!


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



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




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