Download presentation
Presentation is loading. Please wait.
Published byMelina Tate Modified over 9 years ago
1
CS 3370
2
Inserters and Extractors Stream State Files Streams String Streams Formatting Manipulators Internationalization
3
Insert an object into a stream it does formatted output Uses operator<< the “left-shift” operator the arrow suggests the direction of the data flow Easy to define for your own classes
4
A Date class inserter: ostream& operator<<(ostream& os, const Date& d) { char fillc = os.fill('0'); os << setw(2) << d.getMonth() << '-' << setw(2) << d.getDay() << '-' << setw(4) << d.getYear() << setfill(fillc); return os; }
5
istream& operator>>(istream& is, Date& d) { is >> d.month; char dash; is >> dash; if(dash != '-') { is.putback(dash); is.setstate(ios::failbit); // Input disabled return is; } is >> d.day; is >> dash; if(dash != '-') { is.putback(dash); is.setstate(ios::failbit); } is >> d.year; return is; }
6
4 states: eof: set upon an attempt to read past end-of-file ▪ sets fail automatically ▪ eof is meaningless for output streams fail: an operation failed (e.g., alpha chars when reading int) bad: stream is broken (no memory for buffer, device failure) good: none of the other 3 states occurred When an error occurs (fail or bad), the stream is disabled All subsequent stream operations are ignored Can re-enable stream operations with clear( )
7
Can test with associated member functions: good( ), eof( ), fail( ), bad( ) Can test for successful input like this: if (strm) same as if (!strm.fail( ) && !strm.bad() && ! strm.eof( )) Can also use exceptions
8
Can have exceptions thrown instead of checking state Call the exceptions( ) member function Can pick which states you want to throw: myStream.exceptions(ios::badbit); The exception type thrown is ios::failure ios is a base class for streams See strmexcept.cpp
9
while (myStream >> x) // process x (this assumes no input failure) while (getline(myStream, line)) // process line (ditto) You can check conditions separately if (myStream.eof( )) … if (myStream.fail( )) …
10
get getline ignore putback unget peek
11
get( ) returns the next character, or -1 whitespace included get(char& c) puts the character read in c returns the stream get(char* s, int n, char delim = ‘\n’) reads n characters or up to delim
12
getline(char* s, int n, char delim = ‘\n’) returns stream reads and discards delim (different from get) std namespace scope version uses a string, not a char* declared in getline(istream& is, string& s, char delim = ‘\n’) returns stream
13
Discards characters ignore(int n = 1, int delim = eof( )) returns stream For a large n, use: std::numeric_limits ::max()
14
unget() Moves the stream’s get pointer back one The next input op re-reads the previous character putback(char) Puts an arbitrary character into the buffer So the next input op reads that character peek() Returns the next character without moving the get pointer beyond it
15
Classes ifstream, ofstream, fstream declared in Constructors open, destructors close automatically All normal stream operations apply Additional member functions: close( ), open( ) Open modes ios::in, ios::out, ios::app, ios::ate, ios::trunc, ios::binary Can combine with a bitwise-or ( | )
16
Can move around in a stream except when using the console, of course Using functions seekp( ), seekg( ) seekp( ) seeks in the output buffer (p = “put”) seekg( ) seeks in the input buffer (g = “get”) Simultaneous I/O streams share the same buffer ▪ File streams keep the put/get pointers together ▪ In string streams they’re independent
17
Often used by databases can access records randomly Fields must have only built-in data numbers, C-style strings, static arrays no pointers! uses binary mode Use the write and read member functions See employeedb.cpp
18
Classes istringstream, ostringstream, stringstream declared in Writes to or reads from a string or both ▪ but remember the get/put pointers are independent Useful for converting other data types to and from strings Examples: C04/IString.cpp, C04/Ostring.cpp, C04/HTMLStripper2.cpp
19
Can set stream attributes width, fill character, alignment, numeric base, floating-point format, decimal precision, etc. Use setf( ) and unsetf( ) Example: C04/Format.cpp
20
The data area(s) held by the stream One for input, one for output ▪ Streams that support both, have both Can access via the function rdbuf( ) A “Way Station” for data en route Usually don’t worry about it One cool feature: C04/SType.cpp, hexdec.cpp
21
A shorthand for setting/unsetting stream attributes dec, hex, endl, flush Achieved via a special overload convention manipulators are functions when inserted, the following function is called: ostream& ostream::operator<<(ostream& (*pf)(ostream&)) { return pf(*this); } The function pf should do its work and return the stream
22
#include Define a function with the required signature (below) Do your work and return the stream: ostream& nl(ostream& os) { return os << '\n'; } int main() { cout << "newlines" << nl << "between" << nl << "each" << nl << "word" << nl; } cout << nl becomes… cout.operator<<(nl), which executes nl(cout), which executes cout << ‘\n’
23
setw(n), setfill(c), setprecision(n), etc. Must include for these Example: C04/Manips.cpp Difficult to implement your own not portable Use Effectors instead (see next slide)
24
Create a class whose constructor formats a string according to its purpose That class also provides an operator<< Example: C04/Effector.cpp
25
The streams we’ve been using traffic in bytes (char) You can have streams that use wide characters (wchar_t) displaying foreign characters requires platform support outside of C++ C++ just stores code points internally
26
The template that governs the standard stream classes: template > class basic_istream {...}; typedef basic_istream istream; typedef basic_istream wistream; typedef basic_ifstream ifstream; typedef basic_ifstream wifstream; typedef basic_istringstream istringstream; typedef basic_istringstream wistringstream;
27
Cultural customization of I/O formatting A stream has an associated locale Can change it with imbue( ) Example: Locale.cpp (Windows only) Java’s locale support is much better
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.