Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Операции извлечения и передачи в поток

Читайте также:
  1. CПОСОБЫ ПЕРЕДАЧИ ПАРАМЕТРОВ
  2. II. Документопотоки.
  3. Quot;По-возможности" и "в-возможности существующее", холодный и теплый потоки в марксизме
  4. Sul tasto (суль тасто) - буквально «на грифе»: указание исполнителю на струнном инструменте играть у грифа для извлечения более мягкого, прикрытого звука.
  5. VII. ДОКУМЕНТАРНЫЕ ОПЕРАЦИИ
  6. XIII. Сливоналивные операции с сжиженным углеводородным газом
  7. А. Организация потоков при строительстве комплексов (ГМС и гидроузлов).

Классы потоков

К классам потоков относятся следующие:

Для работы с потоками вам потребуется включить в программу заголовочный файл iostream.h. Кроме того, может потребоваться подключить файлы fstream.h (файловый ввод-вывод), iomanip.h (параметризованные манипуляторы) и strstream.h (форматирование ь памяти).

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

Библиотека ввода-вывода C++ предусматривает четыре предопределенных объекта-потока, связанных со стандартными входным и выходным устройствами. Ниже дана сводка этих объектов.

Таблица 1. Предопределенные объекты-потоки C++

Имя Класс Описание
Cin istream Ассоциируется со стандартным вводом (клавиатурой).
Cout ostream Ассоциируется со стандартным выводом (экраном).
cerr ostream Ассоциируется со стандартным устройством ошибок (экраном) без буферизации.
clog ostream Ассоциируется со стандартным устройством ошибок (экраном)с буферизацией.

Операции извлечения и передачи в поток

Основными классами ввода-вывода C++ являются istream и ostream. Первый из них перегружает операцию правого сдвига (>>), которая служит в нем для ввода данных и называется операцией извлечения из потока. Класс ostream перегружает соответственно операцию левого сдвига(<<); она применяется для вывода и называется операцией передачи в поток.

Примечание

Нужно сказать, что стандартной русской терминологии как таковой в C++ не существует. Каждый изобретает свою собственную; иногда удачно, иногда — нет.

Вот простейшие операторы ввода и. вывода на стандартных потоках:

#include <iostream.h>

int main()

{

char name [ 8.0];

cout<< "Enter your name: ";

cin>> name;

cout <<"Hello " << name << "!";

return 0;

}

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

Перегруженные операции для встроенных типов

Классы istream и ostream перегружают операции соответственно извлечения и передачи в поток для всех встроенных типов. Это позволяет единообразно применять эти операции для чтения и вывода символов, целых, вещественных чисел (т. е. с плавающей точкой) и строк. Вот небольшая иллюстрация, где попутно показан еще простейший прием проверки на ошибку при вводе:

#include <iostream.h>

void check(void) {

if (!cin.good())

{

// Либо просто if (!cin) {

cout << "Error detected!";

exit (1);

}

int main(void)

{

double d;

long 1;

cout << "Enter a floating point value: ";

cin >> d;

check ();

cout << "You entered: " << d << '\n';

cout << "Enter an integer value: ";

cin >> 1;

check ();

cout << "You entered: " << 1 << '\n';

return 0;

}

Примечание

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

#include <iostream.h>

class Point { int x, у;

public:

Point(int xx = 0, int yy = 0) {

x = xx; у = yy;

}

friend istream &operator>>(istream&, Points);

friend ostream &operator“(ostream&, Points);

};

istream &operator”(istream &is, Point &p)

//

// При вводе точка представляется просто парой чисел,

// разделенных пробелом.

// is >> р.х > р.у;

return is;

}

ostream &operator<<(ostream &os.Point &p) {

//

// Вывод в виде (х, у).

//

os<< ' ('<< р. х<< ", "<< р. у<<') ';

return os;

}

int main() {

Point р;

cout<< "Enter point coordinates: ";

cin>> р;

cout<< "The point values are " << р;

return 0;

}


Дата добавления: 2015-07-11; просмотров: 138 | Нарушение авторских прав


Читайте в этой же книге: Листинг 2. Форматирование с помощью манипуляторов | Листинг 3. форматирующие флаги потоков | Файловые потоки | Бесформатный ввод-вывод | Листинг 5. Произвольный доступ к файлу |
<== предыдущая страница | следующая страница ==>
Я, Господин Диггерсон, Марк Армстронг, - ответил мужчина. - Я прибыл помочь Госпоже! Господин Рэндолф сказал, где вы будете.| Листинг 1. Демонстрация форматирующих функций потока

mybiblioteka.su - 2015-2024 год. (0.011 сек.)