User-Defined Input Buffers
The input mechanism works basically the same as the output mechanism. However, for input there
is also the possibility of undoing the last read. The functions sungetc(), called by unget() of
the input stream, or sputbackc(), called by putback() of the input stream, can be used to restore
the stream buffer to its state before the last read. It is also possible to read the next character
without moving the read position beyond this character. Thus, you must override more functions to
implement reading from a stream buffer than is necessary to implement writing to a stream buffer.
state of the stream buffer with the corresponding storage medium. Normally, all that needs to be
done is to flush the buffer. For the unbuffered versions of the stream buffer, overriding this function
was not necessary, because there was no buffer to be flushed.
The virtual destructor ensures that data is written that is still buffered when the stream buffer is
destroyed.
These are the functions that are overridden for most stream buffers. If the external representation
has some special structure, overriding additional functions may be useful. For example, the functions
seekoff() and seekpos() may be overridden to allow manipulation of the write position.