C s Predefined Streams

The Standard C++ I/O Classes

The Standard C++ I/O system is constructed from a rather complex system of template classes. These classes are shown here:

Class

Purpose

basic_ios

Provides general-purpose I/O operations

  

basic_streambuf

Low-level support for I/O

basic_istream

Support for input operations

basic_ostream

Support for output operations

basic_iostream

Support for input/output operations

  

basic_filebuf

Low-level support for file I/O

basic_ifstream

Support for file input

basic_ofstream

Support for file output

basic_fstream

Support for file input/output

  

basic_stringbuf

Low-level support for string-based I/O

basic_istringstream

Support for string-based input

basic_ostringstream

Support for string-based output

basic_stringstream

Support for string-based input/output

Also part of the I/O class hierarchy is the nontemplate class ios_base. It provides definitions for various elements of the I/O system.

The C++ I/O system is built upon two related, but different, template class hierarchies. The first is derived from the low-level I/O class called basic_streambuf. This class supplies the basic, low-level input and output operations, and provides the underlying support for the entire C++ I/O system. The classes basic_filebuf and basic_stringbuf are derived from basic_streambuf. Unless you are doing advanced I/O programming, you will not need to use basic_streambuf or its subclasses directly.

The class hierarchy that you will most commonly be working with is derived from basic_ios. This is a high-level I/O class that provides formatting, error checking, and status information related to stream I/O. basic_ios is used as a base for several derived classes, including basic_istream, basic_ostream, and basic_iostream. These classes are used to create streams capable of input, output, and input/output, respectively. Specifically, from basic_istream are derived the classes basic_ifstream and basic_istringstream, from basic_ostream are derived basic_ofstream and basic_ostringstream, and from basic_iostream are derived basic_fstream and basic_stringstream. A base class for basic_ios is ios_base. Thus, any class derived from basic_ios has access to the members of ios_base.

The I/O classes are parameterized for the type of characters that they act upon and for the traits associated with those characters. For example, here is the template specification for basic_ios:

template <class CharType, class Attr = char_traits<CharType> >    class basic_ios: public ios_base

Here, CharType specifies the type of character (such as char or wchar_t) and Attr specifies a type that describes its attributes. The generic type char_traits is a utility class that defines the attributes associated with a character.

The I/O library creates two specializations of the template class hierarchies just described: one for 8-bit characters and one for wide characters. Here is a complete list of the mapping of template class names to their character and wide-character versions:

Template Class

Character-Based Class

Wide-Character-Based Class

basic_ios

ios

wios

   

basic_istream

istream

wistream

basic_ostream

ostream

wostream

basic_iostream

iostream

wiostream

   

basic_ifstream

ifstream

wifstream

basic_ofstream

ofstream

wofstream

basic_fstream

fstream

wfstream

   

basic_istringstream

istringstream

wistringstream

basic_ostringstream

ostringstream

wostringstream

basic_stringstream

stringstream

wstringstream

   

basic_streambuf

streambuf

wstreambuf

basic_filebuf

filebuf

wfilebuf

basic_stringbuf

stringbuf

wstringbuf

Since the vast majority of programmers will be using character-based I/O, those are the names used by this chapter. Thus, when referring to the I/O classes, we will simply use their character-based names rather then their internal, template names. For instance, this chapter will use the name ios rather than basic_ios, istream rather than basic_istream, and fstream rather than basic_fstream. Remember, parallel classes exist for wide-character streams and they work in the same way as those described here.




C(s)C++ Programmer's Reference
C Programming on the IBM PC (C Programmers Reference Guide Series)
ISBN: 0673462897
EAN: 2147483647
Year: 2002
Pages: 539

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net