Ostream c что это
Обратная связь
Определяет шаблон класса basic_ostream, который медиатирует вставки для iostreams. Заголовок также определяет несколько связанных манипуляторов. (Обычно этот заголовок включается другими заголовками iostreams. Вам редко нужно включить его напрямую.)
Синтаксис
#include
Определения типов
| Введите имя | Description |
|---|---|
| ostream | Создает тип из basic_ostream , который специализируется на char , и char_traits , который специализируется на char . |
| wostream | Создает тип из basic_ostream , который специализируется на wchar_t , и char_traits , который специализируется на wchar_t . |
Манипуляторы
| Имя | Описание |
|---|---|
| endl | Завершает строку и очищает буфер. |
| ends | Завершает строку. |
| flush | Очищает буфер. |
| swap | Меняет местами значения левого параметра объекта basic_ostream со значениями правого параметра объекта basic_ostream . |
Операторы
| Operator | Description |
|---|---|
| operator | Записывает в поток различные типы. |
Классы
| Класс | Description |
|---|---|
| basic_ostream | Шаблон класса описывает объект, который управляет вставкой элементов и закодированными объектами в буфер потока. |
Потоки и система ввода-вывода
Все инструменты для работы с системой ввода-вывода и потоками в языке С++ определены в стандартной библиотеке. Заголовочный файл iostream определяет следующие базовые типы для работы с потоками:
- istream и wistream : читают данные с потока
- ostream и wostream : записывают данные в поток
- iostream и wiostream : читают и записывают данные в поток
Для каждого типа определен его двойник, который начинается на букву w и который предназначен для поддержки данных типа wchar_t.
Эти типы являются базовыми для других классов, управляющих потоками ввода-вывода.
Объект типа ostream получает значения различных типов, преобразует их в последовательность символов и передает их через буфер в определенное место для вывода (консоль, файл, сетевые интерфейсы и т.д.)

Поток istream получает через буфер из определенного места последовательности символов (с консоли, из файла, из сети и т.д.) и преобразует эти последовательности в значения различных типов. То есть когда мы вводим данные (с той же клавиатуры в консоли), сначала данные накапливаются в буфере и только затем передаются объекту istream.

По умолчанию в стандартной библиотеке определены объекты этих классов — cout , cin , cerr , которые работают с консолью.
Запись в поток
К примеру, по умолчанию стандартная библиотека C++ предоставляет объект cout , который представляет тип ostream и позволяет выводить данные на консоль:
#include int main()
std::coutЧтение данных
Для чтения данных из потока применяется оператор ввода >> , который принимает два операнда. Левый операнд представляет поток istream, с которого производится считывание, а правый операнд - объект, в который считываются данные.
Для чтения с консоли применяется объект cin , который представляет тип istream.
#include int main() < int age; double weight; std::cout > age; std::cout > weight; std::coutОднако такой способ не очень подходит для чтения строк с консоли особенно когда считываемая строка содержит пробельные символы. В этом случае лучше использовать встроенную функцию getline() , которая в качестве параметра принимает поток istream и переменную типа string, в которую надо считать данные:
#include int main() < std::string name; std::cout > name; std::coutПример работы программы:
Input name: Tom Smit Your name: Tom SmitПо умолчанию признаком окончания ввода служит перевод на другую строку, например, с помощью клавиши Enter. Но также можно задать свой признак окончания ввода с помощью дополнительного параметра функции getline() . Для этого надо передать символ, который будет служить окончанием ввода:
#include int main() < std::string text; std::cout << "Input text: " << std::endl; getline(std::cin, text, '*'); // окончанием ввода будет служить символ * std::cout
В данном случае ввод завершится, когда пользователь введет символ *. Таким образом, мы можем ввести многострочный текст, но при вводе звездочки ввод завершится. Пример работы программы:
Input text: Hello World Good bye world* Your text: Hello World Good bye worldВывод ошибок
Для вывода сообщения об ошибке на консоль применяется объект cerr , который представляет объект типа ostream:
#include int main()
Потоки символов wchar_t
Для работы с потоками данных типов wchar_t в стандартной библиотеке определены объекты wcout (тип wostream), wcerr (тип wostream) и wcin (тип wistream), которые являются аналогами для объектов cout, cerr и cin и работают аналогично
#include int main() < int age; double weight; std::wcout > age; std::wcout > weight; if (age
ostream::operator
Для классов большинство операторов вида X ■ Y (включая
- В виде методов (функций-членов класса): struct A < … operator■(…)>;
- В виде свободных (обычных) функций: struct A <>; int operator■(…, …)
Когда вы пишете X.operator■(Y) , компилятор учитывает только те перегрузки ■ , которые сделаны в виде методов.
Когда вы пишете operator■(X, Y) , компилятор учитывает только те перегрузки, которые сделаны в виде свободных функций.
Когда вы пишете X ■ Y , компилятор учитывает оба варианта перегрузок.
Для const char * (печать строки) он перегружен как свободная функция, а для const void * (печать адреса) он перегружен как метод.
Отслеживать
ответ дан 2 янв 2019 в 12:12
HolyBlackCat HolyBlackCat
26.9k 3 3 золотых знака 27 27 серебряных знаков 40 40 бронзовых знаков
ты тоже правильно ответил,один вопрос остался:ГДЕ ТЫ ВСЁ ЭТО У ЗНАЛ ТЫ ЧТО ДЕКСТЕР КАКОЙ-ТО Я НЕ ПОНИМАЮ ГДЕ ВЫ ВСЕ ТАКИЕ ЗНАНИЯ БЕРЕТЕ может книжка какая-то?
2 янв 2019 в 12:37
2 янв 2019 в 13:02
В определении самого класса для указательных типов имеется только перегрузка для параметра типа void *
template> class basic_ostream : virtual public basic_ios < public: . basic_ostream& operator<<(const void* p); . >;
cout.operator
вызывается именно функция-член класса, а других подходящих вариантов перегрузки нет: "Hello" - массив char[6] , который может быть неявно преобразован в char const * , который в свою очередь преобразуется в void const * поэтому и выводится адрес, в соответствии с поведением данной перегрузки.
Перегрузки, принимающие char const * объявлены как внешние функции:
template basic_ostream& operator<<(basic_ostream&, const char*); template basic_ostream& operator<<(basic_ostream&, const char*);
operator<<(cout, "Hello");
Библиотека iostream. Основные операции

Модуль (или как говорят в случае с Си – хедер) или заголовочный файл iostream призван предоставить средства ввода-вывода, для стандартной консоли. Т.е. то, что вводит с клавиатуры и читает с экрана пользователь.
Все его возможности размещены в пространстве имен std , поэтому для его использования либо приходится приписывать префикс std , либо указывать пространство имен через using namespace
using namespace std ;
cin >> Переменная ;
cout << "Чет там" ;
std :: cin >> Переменная ;
std :: cout << "Чет там" ;
В этой статье будем использовать первый вариант – подключение пространства имен через using namespace .
iostream содержит два основных класса:
- cin – для обработки ввода с клавиатуры;
- cout – для вывода в консоль переменных или просто текста;
Есть еще классы cerr и clog , но их в целом, используют не так часто, и о них мы упоминать не будем. Если кому интересно – эти классы используют для вывода ошибок при операциях и для логирования действий.
Сразу скажу, что не всё, что присуще этим классам будет описано. Только самое часто используемое из функционала. Это операторы перенаправления форматированного вывода ( и >> ), которые занимаются выводом значений переменных в зависимости от их типов и указанного формата. Это операторы неформатированного чтения\записи (читай: по байтам или посимвольно), методы get() , put() и write() призванные просто вывести массив символов какими бы они ни были. И операторы форматирования setf() , width() , precision() , которые указывают для текущего вывода, как форматировать выводимое, как выравнивать его, по какой стороне и сколько ставить символов после запятой.
Класс cin
Класс cin содержит множество методов. Все их можно увидеть, если ввести в среде разработки ключевое слово cin и поставить после него точку. Редактор кода предложит все имеющиеся методы этого класса на выбор:

Как сказано выше, для начинающих программистов, мы рассмотрим только некоторые из них.
Класс cin основан на классе istream , и содержит возможность перенаправления ввода. Используя перегрузку оператора >> , класс позволяет указать в какую переменную будет производиться ввод данных.