Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
freegat
-7 / 23 / 2
Регистрация: 05.03.2009
Сообщений: 181
#1

Вопрос про потоки вывода - C++

01.11.2009, 06:46. Просмотров 1116. Ответов 3
Метки нет (Все метки)

Здравствуйте, подскажите в чём кординальная разница между использованием cerr и cout?!?!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2009, 06:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вопрос про потоки вывода (C++):

Что такое потоки ввода, потоки вывода? - C++
Здарова всем! Не так давно уже прогаю на С++ и все НИКАК не могу понять, что такое потоки ввода, потоки вывода..! вот допустим...

Потоки вывода - C++
Даже не знаю как правильно сформулировать, но хотел сделать примерно следующее и вошел в ступор. Как создать класс, который смог бы...

потоки вывода - C++
доброго времени суток, Уважаемые форумчане! есть проблема, суть проблемы заключается в следующем: ни как не могу передать поток в...

Потоки ввода-вывода - C++
1) Типы данных, для которых перегружены операторы форматного ввода-вывода.

Потоки ввода вывода - C++
Почему с помощью классов ostream и istream нельзя создавать свои потоки ввода вывода? std::ostream output; output << "String"; К...

Потоки вводы и вывода - C++
Не обрезает пробелы string str; cin.setf(ios::skipws); cin >> str; cout << str; И можно как-нибудь с...

3
Rustam
12 / 12 / 3
Регистрация: 05.09.2009
Сообщений: 440
01.11.2009, 07:01 #2
Обмен данными между программой и внешними устройствами осуществляется с помощью операций ввода-вывода. Типичным внешним устройством является терминал. На терминале можно напечатать информацию. Можно ввести информацию с терминала, напечатав ее на клавиатуре. Другим типичным устройством является жесткий или гибкий диск, на котором расположены файлы. Программа может создавать файлы, в которых храниться информация. Другая (или эта же) программа может читать информацию из файла.

В языке Си++ нет особых операторов для ввода или вывода данных. Вместо этого имеется набор классов, стандартно поставляемых вместе с компилятором, которые и реализуют основные операции ввода-вывода.
Причиной является как слишком большое разнообразие операций ввода и вывода в разных операционных системах, особенно графических, так и возможность определения новых типов данных в языке Си++. Вывод даже простой строки текста в MS DOS, MS Windows и в X Window на-столько различен, что пытаться придумать общие для всех них операторы было бы слишком негибко и на самом деле затруднило бы работу. Что же говорить о классах, определенных программистом, у которых могут быть совершенно специфические требования к их вводу-выводу.


Библиотека классов для ввода-вывода решает две задачи. Во-первых, она обеспечивает эффективный ввод-вывод всех встроенных типов и простое, но тем не менее гибкое, определение операций ввода-вывода для новых типов, разрабатываемых программистом. Во-вторых, сама библиотека позволяет при необходимости развивать её и модифицировать.

В нашу задачу не входит описание программирования в графических системах типа MS Windows. Мы будем рассматривать алфавитно-цифровой выводу на терминал, который будет работать на консольном окне MS Windows, в MS DOS, в системе Unix и ввод-вывод файлов.
Потоки

Механизм для ввода-вывода в Си++ называется потоком. Название произошло от того,что информация вводится и выводится в виде потока байтов – символ за символом.

Класс istream реализует поток ввода, класс ostream – поток вывода. Эти классы определены в файле заголовков iostream.h. Библиотека потоков ввода-вывода определяет три глобальных объекта: cout, cin и cerr. cout называется стандартным выводом, cin – стандартным вводом, cerr – стандартным потоком сообщений об ошибках. cout и cerr выводят на терминал и принадлежат к классу ostream, cin имеет тип istream и вводит с терминала. Разница между cout и cerr существенна в Unix – они используют разные дескрипторы для вывода. В других системах они существуют больше для совместимости.

Вывод осуществляется с помощью операции >>, ввод с помощью операции <<. Выражение
cout << "Пример вывода: " << 34;

напечатает на терминале строку "Пример вывода", за которым будет выведено число 34. Выражение
int x;
cin >> x;

введет целое число с терминала в переменную x. (Разумеется, для того, чтобы ввод произошел, на терминале нужно напечатать какое-либо число и нажать клавишу возврат каретки.)
Операции << и >> для потоков

В классах iostream операции >> и << определены для всех встроенных типов языка Си++ и для строк (тип char*). Если мы хотим использовать такую же запись для ввода и вывода других классов, определенных в программе, для них нужно определить эти операции.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class String
{
public:
     friend ostream& operator<<(ostream& os, const String& s);
     friend istream& operator>>(istream& is, String& s);
private:
     char* str;
     int length;
};
ostream& operator<<(ostream& os, const String& s)
{
     os << s.str;
     return os;
}
istream& operator>>(istream& is, String& s)
{
// предполагается, что строк длиной более 1024 байтов не будет
     char tmp[1024];
     is >> tmp;
 
     if (str != 0) {
          delete [] str;
     }
     length = strlen(tmp);
     str = new char[length + 1];
     if (str == 0) {
          // обработка ошибок
          length = 0;
          return is;
     }
     strcpy(str, tmp);
     return is;
}
Как показано в примере класса String, операция <<, во-первых, является не методом класса String, а отдельной функцией. Она и не может быть методом класса String, поскольку ее правый операнд – объект класса ostream. С точки зрения записи, она могла бы быть методом класса ostream, но тогда с добавлением нового класса приходилось бы модифицировать класс ostream, что невозможно – каждый бы модифицировал стандартные классы, поставляемые вместе с компилятором. Когда же операция << реализована как отдельная функция, достаточно в каждом новом классе определить ее, и можно использовать запись:
String x;
. . .
cout << "this is a string: " << x;

Во-вторых, операция << возвращает в качестве результата ссылку на поток вывода. Это позволяет использовать ее в выражениях типа приведенного выше, соединяющих несколько операций вывода в одно выражение.

Аналогично реализована операция ввода. Для класса istream она определена для всех встроенных типов языка Си++ и указателей на строку символов. Если необходимо, чтобы класс, определенный в программе, позволял ввод из потока, для него нужно определить операцию >> в качестве функции friend.
0
niXman
Эксперт С++
3139 / 1451 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
01.11.2009, 07:16 #3
Rustam, Ссылку на оригинал плиз.
0
Rustam
12 / 12 / 3
Регистрация: 05.09.2009
Сообщений: 440
01.11.2009, 07:58 #4
Да пожалуйста http://www.intuit.ru/department/pl/cpp/17/
0
01.11.2009, 07:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2009, 07:58
Привет! Вот еще темы с ответами:

Потоки ввода-вывода в С++ - C++
Ребят, нужна помощь В программирование я новичок, но сдать нужно 1. Написать программу, печатающую символы. Использовать цикл while....

Используя потоки ввода/вывода в С++ - C++
Здравствуйте помогите организовать запись информации из массива объектов в класс, чтение данной информации из класса, ввод информации с...

Ищу литературу про потоки - C++
Дайте, пожалуйста, нормальный ресурс где будет хорошо объяснено про потоки, мьютексы, семантика и так далее. Скачал книгу параллельное...

Непонятная ошибка. Потоки ввода/вывода - C++
Решал задачу и столкнулся с проблемой (первый день на c++ &quot;пишу&quot;) не пойму что за ошибка #include &quot;stdafx.h&quot; #include &lt;iostream&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru