2015-04-22 7 views
0

Я новый студент C++ и не знаю, что делать с паровым входом/выходом.C++ streams/template template/instance

Я действительно учился у книги, и я нашел ниже строки, которые меня путают.

«Библиотека iostream предоставляет множество шаблонов для обработки общих операций I/O, например, шаблон класса basic_ostream поддерживает поток-вывод операции ...».

Означает ли это basic_ostream определяется как:

template <class basic_ostream> 

В следующем разделе я вижу строки «Предопределенный объект cout является экземпляром Ostream и, как говорят,« подключен »к стандартному устройству вывода, которое обычно является экраном дисплея».

Так что, основываясь на приведенных выше утверждениях, я бы предположил, что ниже верно.

template <class basic_ostream> 

class ostream { 
    basic_ostream cout ("some value"); 
} 

Это сбивает с толку меня много, потому что в следующей главе, книга начинает обсуждать поставить функцию ...

cout.put('A'); 

Это означает, соиЬ на самом деле является классом объекта, а не экземпляр: класс. Я просто путаю определение «экземпляр»? Пожалуйста, помогите !!!

ответ

0

Параметры шаблона связаны с типом символа, который считывается из/записывается в поток.

соиЬ (и CIN, сегг, забивает) что-то вроде:

namespace std { 
    basic_ostream<char> cout; 
    basic_ostream<char> cerr; 
    basic_ostream<char> clog; 
    basic_istream<char> cin; 
} 

Есть также версия, которые считывают и записывают широкие символы:

namespace std { 
    basic_ostream<wchar_t> wcout; 
    basic_ostream<wchar_t> wcerr; 
    basic_ostream<wchar_t> wclog; 
    basic_istream<wchar_t> wcin; 
} 

Таким образом, каждый из этих стандартных потоков является экземпляр класса, где класс представляет собой экземпляр шаблона над типом символа, который считывается из/записывается в этот поток.

Для чего это стоит, один другого пункт: есть еще один тип, называемый std::ios_base::Init, что создает эти экземпляры, прежде чем main начинает выполняться, и уничтожает их через некоторое время после завершения выполнения main.

+0

Прежде всего, спасибо за ответ! ;) Я все еще не понимаю концепцию. Итак, будет класс, который обрабатывает поток, в «пространстве имен std {}» и в этом классе представлены cout, cerr, clog и cin? или вы говорите, что cout, cerr, clog и cin сами являются классами? Если да, почему нет ключевого слова 'class'? – GrinNare

+0

@GrinNare: No - cin, cout, clog и cerr - это объекты - экземпляры классов. –

+0

Итак, cout будет объектом класса basic_ostream, который принимает значение char или wchar_t? Я прав? – GrinNare

Смежные вопросы