ilyachalov (ilyachalov) wrote,
ilyachalov
ilyachalov

Categories:

Иерархия потоковых классов в C++

В учебнике Лафоре дана следующая схема (стр.538):

Иерархия потоковых классов в C++ (2001 год)

Я уже отмечал, что книга была издана в 2001 году. Эта схема довольно сильно устарела. Автор рекомендует поизучать заголовочные файлы стандартной библиотеки, те из них, которые содержат определения потоковых классов. Ну я и порылся в папке include (см. предыдущий пост).

На вышеприведенной схеме внизу указаны два заголовочных файла: iostream и fstream, а в книге еще упоминается strstream. Слева от названия заголовочного файла iostream на схеме нарисован прямоугольник, а слева от fstream — прямоугольник со скругленными углами. Это значит, что классы в обычных прямоугольниках определены в заголовочном файле iostream, а классы в прямоугольниках со скругленными углами — в заголовочном файле fstream.

Что изменилось на сегодня:

1) Классов istream_withassign, iostream_withassign, ostream_withassign в современной редакции стандарта C++ нет (источник);

2) Класс fstreambase тоже убрали;

3) Вместо классов сделали шаблоны классов, чтобы можно было пользоваться одним шаблоном для любого из базовых символьных типов (char, wchar_t). Все потоковые шаблоны имеют приставку «basic_» в названии. Например: был класс iostream, вместо него теперь шаблон basic_iostream, который дает возможность использовать в программе классы iostream (для базового типа char) и wiostream (для базового типа wchar_t), то есть для базового типа wchar_t к названию класса впереди добавляется буква «w»;

4) Использование упомянутого выше заголовочного файла strstream и описанных в нем классов не одобряется, вместо него следует использовать заголовочный файл sstream и описанные в нем классы.

Я набросал новую схему с помощью сервиса draw.io в соответствии с этими изменениями. Использовал следующие источники:
https://en.cppreference.com/w/cpp/io
https://en.wikipedia.org/wiki/Input/output_(C++)

Иерархия потоковых классов в C++ (2019 год)

В моей версии среды «Visual Studio Community 2017» для Windows определения классов и шаблонов классов разбросаны по заголовочным файлам в следующем порядке:


  • iostream: определены стандартные потоки cin, cout, wcin, wcout и т.д., включен файл istream;

  • istream: определены шаблоны basic_istream и basic_iostream, включен заголовочный файл ostream;

  • ostream: определен шаблон basic_ostream, включен заголовочный файл ios;

  • ios: определен шаблон basic_ios, включен заголовочный файл xlocnum, а через него — streambuf;

  • streambuf: определен шаблон basic_streambuf, включен заголовочный файл xiosbase;

  • xiosbase: определен класс ios_base.

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


  • fstream: определены шаблоны basic_filebuf, basic_ifstream, basic_ofstream, basic_fstream.

  • sstream: определены шаблоны basic_stringbuf, basic_istringstream, basic_ostringstream, basic_stringstream.

Tags: Образование, Программирование, Рисунки
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 0 comments