Download presentation
Presentation is loading. Please wait.
Published bySteven Reynolds Modified over 9 years ago
1
Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 1 - - 1 - IO Streams IOStreams are part of the Standard C++ library Meant to be used in place of C stdio library So why re-invent the standard io library
2
Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 2 - - 2 - IO Streams Considerations for IOStreams vs. printf... printf uses format strings printf format strings are interpreted at run time not compile time With printf binding between variables and values occurs at runtime With IO streams there are no format strings Cannot overload printf
3
Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 3 - - 3 - IOStream Class Hierarchy IOS streambuf* readbuf( ) IOS streambuf* readbuf( ) ostream const ostream& operator << (type) const ostream& operator << (streambuf*) ostream const ostream& operator << (type) const ostream& operator << (streambuf*) istrstream ifstream ofstream ostrstream istream const istream& operator >> (type) const istream& operator >> (streambuf*) istream const istream& operator >> (type) const istream& operator >> (streambuf*) streambuf
4
Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 4 - - 4 - Input Streams The extraction Operator >> Performs the same function as scanf in the C stdio library Uses white space to delimit its arguments Type at the keyboard 234 678 Execute code int i, j; cin >> i >> j; i contains 234 j contains 678
5
Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 5 - - 5 - Input Streams The extraction Operator >> Because istream extraction works like scanf….. It has many of the same problems Type at the keyboard my name Execute code int i, j; cin >> i >> j; values I and j are left unchanged
6
Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 6 - - 6 - Input Streams istream member functions to the rescue…. get( ) getline( ) Allow us to read an entire line or buffer
7
Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 7 - - 7 - Input Streams get Member Function Prototypes class istream { public:... istream& get(char* ptr, int len, char delim = `\n'); istream& get(char& c); int get(); istream& getline(char* ptr, int len, char delim = `\n'); istream& getline(char& c); int getline(); istream& read(char* ptr, int n); }; class istream { public:... istream& get(char* ptr, int len, char delim = `\n'); istream& get(char& c); int get(); istream& getline(char* ptr, int len, char delim = `\n'); istream& getline(char& c); int getline(); istream& read(char* ptr, int n); };
8
Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 8 - - 8 - Input Streams Member function get Leaves delimiter in input stream Member function getline Reads and discards delimiter Member function read Used to read raw non-delimited bytes
9
Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 9 - - 9 - Output Streams The Insertion Operator << Performs the same function as printf in the C stdio library Its function members are similar to those in the istream class class ostream { public:... ostream& put(char c); ostream& write(const char* buffer, int length); } ;
10
Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 10 - Output Streams The Insertion Operator << Member Function put Inserts single character into output stream Member Function write Writes specified number of characters... From designated buffer into output stream
11
Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 11 - Error Handling on Input Reading Correct Input Data... IOstreams designed so they can be tested if (cin) if (!cin) Return true If the last read was successful Return false If the last read was unsuccessful
12
Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 12 - char buffer[256]; while (cin.getline(myBuff, sizeof(myBuf))) { // process the characters in the buffer. } char buffer[256]; while (cin.get(myBuff, sizeof(myBuf))) { cin.get()// read and discard newline // process the characters in the buffer. } Error Handling on Input
13
Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 13 - Error Handling on Input Testing for Errors… cin.good() Returns true if no errors cin.eof() Returns true if the input stream is at end of file cin.fail() Returns true if some input operation has failed cin.bad() Returns true if something has gone wrong with streambuf
14
Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 14 - Error Handling on Input Testing for Errors… Once an input stream returns an error, it will no longer read any input To clear an error condition on a stream one must call the clear() error member function Syntax cin.clear();
15
Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 15 - File IO Streams ifstream and ofstream To open file… File stream's constructor is passed the file to open Prototype ofstream output( char* myFileName );
16
Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 16 - File IO Streams ifstream and ofstream void main( void ) { ofstream output("myFile.dat"); if (!output) { cerr << "Oops problem!!! Can’t open myFile.dat" << endl; } return; }
17
Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 17 - File IO Streams ifstream and ofstream Observe the function ignore( ) …. It’s tossing out the newline character left in input stream by the get function Prototype istream& ignore(int n = 1, int delim = EOF); n specifies the number of characters to ignore delim character after which ignore quits.
18
Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 18 - File IO Streams ifstream and ofstream Observe the second argument to the ifstream constructor ios::in Specifies file to be opened for input Default is input on an input stream
19
Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 19 - IO Streams Seeking in IOStreams... Absolute stream location in a stream called streampos Can obtain current stream position tellp( ) member function of ostream Identifies the current position in the output streambuf tellg( ) member function of istream Identifies the current position in the input streambuf To move within a streambuf seekp member function of ostream seekg member function of istream
20
Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 20 - IO Streams Seeking in IOStreams... Prototypes seekp (position); // absolute position seekp (offset, ios::seekdir); // relative position seekg (position); // absolute position seekg (offset, ios::seekdir); // relative position seekdir beg - seek from beginning of current file curr - seek from current position end - seek backwards from end of current file Prototypes seekp (position); // absolute position seekp (offset, ios::seekdir); // relative position seekg (position); // absolute position seekg (offset, ios::seekdir); // relative position seekdir beg - seek from beginning of current file curr - seek from current position end - seek backwards from end of current file
21
Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 21 - Strstreams Formatting Using Streams… Often when working with display screens necessary to dynamically create messages Useful functions in the C stdio library for doing such formatting functions sprintf and sscanf C++ also provides similar functionality with strstreams. Must include
22
Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 22 - Strstreams istrstreams… Constructors for istrstream Create an input stream with the string passed to constructor as input istrstream::istrstream(char* buf); istrstream::istrstream(char* buf, int size);
23
Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 23 - Strstreams ostrstreams… Constructors for ostrstream Create an output stream with the string passed to constructor as input ostrstream::ostrstream(char* buf, int size, int = ios::out); out - characters formatted into starting address of buffer Write pointer positioned at start of buffer app - characters appended to end of buffer Write pointer positioned at null terminator at end of string
24
Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 24 - Strstreams ostrstreams… The ostrstream will only allow size characters to be inserted ostrstream does not automatically insert a null terminator into buffer….Special manipulator ends provided
25
Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 25 - Strstreams ostrstreams and Storage Allocation User Specified char myBuffer[128]; ostrstream myString(myBuffer, sizeof(myBuffer)); myString << "Bonjour la Monde" << ends; User Specified char myBuffer[128]; ostrstream myString(myBuffer, sizeof(myBuffer)); myString << "Bonjour la Monde" << ends; Automatic ostrstream myString; // myString automatically allocates storage to hold the string. myString << " Bonjour la Monde” << ends;; Automatic ostrstream myString; // myString automatically allocates storage to hold the string. myString << " Bonjour la Monde” << ends;;
26
Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 26 - Strstreams Accessing ostrstream Contents... To access the string an ostrstream contains Use member function str( ) ….. ….Returns a pointer to internal buffer holding the string char* cp = A.str();
27
Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 27 - Strstreams Accessing ostrstream Contents and Freezing the Stream Invoking member function str ( ) freezes the stream Action causes ostrstream return pointer to its internal buffer User invoking str ( ) is now responsible for managing the storage
28
Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 28 - Strstreams Accessing ostrstream Contents and Unfreezing the Stream Frozen stream can be unfrozen... returns pointer to ostrstream Syntax ostrstreamInstance.rdbuff()->freeze(int arg = 1); arg – 0 Unfreeze the stream arg – 1 (or none) Freeze the stream
29
Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 29 - IO Streams Overloading the Insertion Operator When working with streams a particularly useful operator to overload is insertion operator Can specify how to send data to standard out or to a file Such ability can also be useful for debugging or saving the state of a program
30
Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 30 - IO Streams Overloading the Insertion or Extraction Operators When overloading insertion or extraction operator Must support constructs of form cout << A << B << C… cin >> J >> L >> M…
31
Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 31 - IO Streams Overloading the Insertion or Extraction Operators Syntax ostream& operator<<(ostream& streamObject, const type& instance); streamObject - instance of a steam object passed by reference instance - instance of a user defined variable passed by const reference
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.