slide: 1 interra induction training object oriented programming in c++ io streams kolkata, july 25,...
TRANSCRIPT
![Page 1: Slide: 1 Interra Induction Training Object Oriented Programming in C++ IO Streams Kolkata, July 25, 2005](https://reader035.vdocuments.us/reader035/viewer/2022062511/551425a9550346d8488b5a22/html5/thumbnails/1.jpg)
Slide: 1
Interra Induction Training
Object Oriented Programming in C++
IO Streams
Kolkata, July 25, 2005
![Page 2: Slide: 1 Interra Induction Training Object Oriented Programming in C++ IO Streams Kolkata, July 25, 2005](https://reader035.vdocuments.us/reader035/viewer/2022062511/551425a9550346d8488b5a22/html5/thumbnails/2.jpg)
Slide: 2
Topics
• Classes in C++ Stream I/O library
• Defining custom input, output functions for user defined types
• File Input/Output
• Input/Output using String Stream
![Page 3: Slide: 1 Interra Induction Training Object Oriented Programming in C++ IO Streams Kolkata, July 25, 2005](https://reader035.vdocuments.us/reader035/viewer/2022062511/551425a9550346d8488b5a22/html5/thumbnails/3.jpg)
Slide: 3
Streams
• Stream I/O library• Type-safe• Extensible• output to “output stream” object:
• cout << “Exit program? “;• cerr << “Error encountered\n”;
• input from “input stream” object:char answer [ 10 ] ;
cin >> answer ;
• cin, cout and cerr are static objects defined in the library.
![Page 4: Slide: 1 Interra Induction Training Object Oriented Programming in C++ IO Streams Kolkata, July 25, 2005](https://reader035.vdocuments.us/reader035/viewer/2022062511/551425a9550346d8488b5a22/html5/thumbnails/4.jpg)
Slide: 4
Stream Library Classes
ios
istream ostream
iostream
fstream
ifstream ofstreamistrstream ostrstream
strstream
![Page 5: Slide: 1 Interra Induction Training Object Oriented Programming in C++ IO Streams Kolkata, July 25, 2005](https://reader035.vdocuments.us/reader035/viewer/2022062511/551425a9550346d8488b5a22/html5/thumbnails/5.jpg)
Slide: 5
Class iosclass ios {
public :
.
.
.
enum io_state { goodbit=0, eofbit=1, failbit=2,
badbit=4, hardfail=0200 };
int eof () const;
int fail () const;
int bad () const;
int good () const;
int rdstate () const;
void clear (int i = 0);
operator void* ();
int operator! () cost;
.
.
.
enum open_mode {in=1, out=2, ate=4, app=010, trunc=020
nocreate=040, noreplace=0100 };
enum seek_dir { beg=0, cur=1, end=2 };
.
.
.
};
![Page 6: Slide: 1 Interra Induction Training Object Oriented Programming in C++ IO Streams Kolkata, July 25, 2005](https://reader035.vdocuments.us/reader035/viewer/2022062511/551425a9550346d8488b5a22/html5/thumbnails/6.jpg)
Slide: 6
class ostreamclass ostream : virtual public ios {
public :
...
ostream & operator<<(unsigned char c);
ostream & operator<< (const char*);
ostream & operator<< (int a);
ostream& operator<<(double);
ostream& operator<<(float);
ostream& operator<<(unsigned int a);
ostream& operator<<(void*);
ostream& operator<<(short I);
...
ostream& put (char c);
..
ostream& seekp (streampos p) ;
streampos tellp ();
ostream& flush (ostream&);
};
• Class ostream is defined with the operator<< to deal with built in types.
• operator<< function return a reference to the ostream it was called for. Cout<< “x==“ << x;
![Page 7: Slide: 1 Interra Induction Training Object Oriented Programming in C++ IO Streams Kolkata, July 25, 2005](https://reader035.vdocuments.us/reader035/viewer/2022062511/551425a9550346d8488b5a22/html5/thumbnails/7.jpg)
Slide: 7
Built-in Type Output: Example/* use_ostream.cpp */
#include <iostream.h>
int
main (int. char * [ ] )
{
cout << 42;
cout << “\thello world\n”;
cout << 3.1415;
double a = 4.56;
int b = 7;
cout << “\nthe sum of “ << a << “ and “ << b
<< “ is: “ << a + b << “.\n”;
if (cout.good () ) {
cout << “all I/O successful.\n”;
}
else {
cerr << “Some I/O operations failed.\n”;
}
return 0;
}
![Page 8: Slide: 1 Interra Induction Training Object Oriented Programming in C++ IO Streams Kolkata, July 25, 2005](https://reader035.vdocuments.us/reader035/viewer/2022062511/551425a9550346d8488b5a22/html5/thumbnails/8.jpg)
Slide: 8
class istream
class istream : virtual public ios {
public :
istream& operator>> (char*);
istream& operator>> (unsigned char*);
istream& operator>> (unsigned char& c);
istream& operator>> (char& C);
istream operator>> (short&);
istream& operator>> (int&);
istream& operator>> (unsigned short&);
isteam& operator>> (unsigned int&);
istream& operator>> (unsigned long&);
istream& operator>> (double&);
…..
istream& get (char* , int lim, char delim+’\n’);
istream& get (char&c);
int get ();
int peek ();
...
istrem& seekg (streampos p);
Streampos tellg ();
….
• Input is similar to output.
• operator>> is overloaded in istream class to take care of built in types.
• operator>> returns a reference to the same istream object it was called for.
![Page 9: Slide: 1 Interra Induction Training Object Oriented Programming in C++ IO Streams Kolkata, July 25, 2005](https://reader035.vdocuments.us/reader035/viewer/2022062511/551425a9550346d8488b5a22/html5/thumbnails/9.jpg)
Slide: 9
Built in Types: Input#include <iostream.h>
int main (int, char * [ ] )
{
int i;
char buffer [ 256];
double d;
cout << “Enter an integer, a string, and a double\n”
cin >> I; // operator>> (int &);
cin >> buffer; // operator>> (char *);
cin >> d; // operator>> (double &);
// cin >> i >> buffer >> d; is equivalent to above
if (cin) {
cout << “int is: “<< i)
<< “\nstring is: “ << buffer
<< “\ndouble is: “ << d << ‘\n’;
else {
cerr << “input unsuccessful. \n”;
}
return 0;
}
![Page 10: Slide: 1 Interra Induction Training Object Oriented Programming in C++ IO Streams Kolkata, July 25, 2005](https://reader035.vdocuments.us/reader035/viewer/2022062511/551425a9550346d8488b5a22/html5/thumbnails/10.jpg)
Slide: 10
Adding I/O operations to Complex Class
class Complex{double re, im;public: friend Complex operator +
(Complex, Complex); friend Complex operator -
(Complex, Complex); …. friend ostream& operator<<
(ostream&, Complex); friend istream& operator>>
(istream&, Complex);};
ostream &operator<< (ostream &s, Complex z)
{return s<< ‘(‘ << z.re << ‘,’
<< z.im << ‘)’ ; }
/* Input Formats permitted f( f )( f , f )
*/istream &operator>> (ostream &s, Complex
a){
double re =0, im = 0; char c = 0;s >>c;if (c == ‘(‘){
s >> re >> c;if (c == ‘,’) s >> im >> c;if (c != ‘)’) s. clear(ios::badbit);
}else {
s.putback©;s >> re;
}if (s) a = Complex (re, im);return s;
}
![Page 11: Slide: 1 Interra Induction Training Object Oriented Programming in C++ IO Streams Kolkata, July 25, 2005](https://reader035.vdocuments.us/reader035/viewer/2022062511/551425a9550346d8488b5a22/html5/thumbnails/11.jpg)
Slide: 11
File Stream Objects and Methods
• To store and retrieve data A file, a file stream object, a mode
• Data file Collection of data stored on a storage medium other than
computer memory
• External file name
• File stream One way transmission path between the device file and
the C++ program
• Mode Determines the data direction in the transmission stream
![Page 12: Slide: 1 Interra Induction Training Object Oriented Programming in C++ IO Streams Kolkata, July 25, 2005](https://reader035.vdocuments.us/reader035/viewer/2022062511/551425a9550346d8488b5a22/html5/thumbnails/12.jpg)
Slide: 12
File Stream Methods
• Pre-written methods
Open, close, read, append, decide if EOF
• Open
Open and establish link between the file and C++ program
External computer name = stream object name used by the program
• inFile.open(“test.data”);
• Both, ifstream and ofstream, can open an external file
![Page 13: Slide: 1 Interra Induction Training Object Oriented Programming in C++ IO Streams Kolkata, July 25, 2005](https://reader035.vdocuments.us/reader035/viewer/2022062511/551425a9550346d8488b5a22/html5/thumbnails/13.jpg)
Slide: 13
Input and Output Streams
•When an existing file is connected to an input file stream
Data is made available for input starting at the first data item in the file
•When a file is connected to an output file stream
Creates a new file and makes the file available for output
If a file exists with the same name, old file is ERASED and all data is lost
• Can be fixed by indicator modes ios::app, ios::noreplace
![Page 14: Slide: 1 Interra Induction Training Object Oriented Programming in C++ IO Streams Kolkata, July 25, 2005](https://reader035.vdocuments.us/reader035/viewer/2022062511/551425a9550346d8488b5a22/html5/thumbnails/14.jpg)
Slide: 14
Opening Status
• When a file is opened
Check if the connection is made
Otherwise, crash will follow later
ifstream inFile;
inFile.open(“test.dat”,ios::nocreate);
if(inFile.fail())
{
cout << “The file was not successfully opened. Check if file exists.\n”;
exit(1);
}
If file does not exist, open failsinFile.fail() returns “1”
![Page 15: Slide: 1 Interra Induction Training Object Oriented Programming in C++ IO Streams Kolkata, July 25, 2005](https://reader035.vdocuments.us/reader035/viewer/2022062511/551425a9550346d8488b5a22/html5/thumbnails/15.jpg)
Slide: 15
Mode Indicators
If file exists, open for output filesios::noreplace
If file does not exist, open failsios::nocreate
Delete file contents if it existsios::trunc
Open in binary mode (default text)ios::binary
Go to the end of the opened fileios::ate
Open in append modeios::app
Open in output modeios::out
Open in input modeios::in
Methods/functions under ios class
![Page 16: Slide: 1 Interra Induction Training Object Oriented Programming in C++ IO Streams Kolkata, July 25, 2005](https://reader035.vdocuments.us/reader035/viewer/2022062511/551425a9550346d8488b5a22/html5/thumbnails/16.jpg)
Slide: 16
Another way to open
• When a file is opened
Check if the connection is made
Otherwise, crash will follow later
fstream inFile;
inFile.open(“test.dat”, ios::in | ios::nocreate);
if(inFile.fail())
{
cout << “The file was not successfully opened. Check if file exists.\n”;
exit(1);
}
Use fstream class
Requires indicator arguments
![Page 17: Slide: 1 Interra Induction Training Object Oriented Programming in C++ IO Streams Kolkata, July 25, 2005](https://reader035.vdocuments.us/reader035/viewer/2022062511/551425a9550346d8488b5a22/html5/thumbnails/17.jpg)
Slide: 17
fstream Methods
Skip next n charsignore(n)
If end of fileeof()
Push char back to input stream
putback(char-expression)
Put char in out streamput(char-expression)
Retrieve char without extracting
peek(char-var)
Extract charsgetline(string-var,n,’\n’)
Extract next charget(char-var)
MeaningMethod
![Page 18: Slide: 1 Interra Induction Training Object Oriented Programming in C++ IO Streams Kolkata, July 25, 2005](https://reader035.vdocuments.us/reader035/viewer/2022062511/551425a9550346d8488b5a22/html5/thumbnails/18.jpg)
Slide: 18
Reading From a File: Example
#include <fstream.h>
#include <iomanip.h>
void main() {
char filename[MAXLENGTH] = “test.dat”;
char descrip[MAXCHARS];
int ch; float price; ifstream inFile;
inFile.open(filename, ios::nocreate);
if (inFile.fail())
{ cout << “\n The file was not successfully opened\n”; exit(1); }
cout << setiosflags(ios::fixed) << setiosflags(ios::showpoint) << setprecision(2);
while ( ( ch = inFile.peek()) != EOF) // check next character
inFile >> descrip >> price;
inFile.close();
}
![Page 19: Slide: 1 Interra Induction Training Object Oriented Programming in C++ IO Streams Kolkata, July 25, 2005](https://reader035.vdocuments.us/reader035/viewer/2022062511/551425a9550346d8488b5a22/html5/thumbnails/19.jpg)
Slide: 19
Random File Access
• File organization
The way data is stored in a file
• Sequential organization
Characters are stored in a sequential manner
• File access
The way data is retrieved from the file
Storing sequentially does not mean accessing sequentially
• Random access
Any character can be read directly without having to read all the characters ahead of it
Each ifstream object uses a position marker
Keeps track of the offset of the next character from the beginning of the file
![Page 20: Slide: 1 Interra Induction Training Object Oriented Programming in C++ IO Streams Kolkata, July 25, 2005](https://reader035.vdocuments.us/reader035/viewer/2022062511/551425a9550346d8488b5a22/html5/thumbnails/20.jpg)
Slide: 20
File Position Marker Functions
End of the fileios:: end
Current positionios:: cur
Beginningios:: beg
Output, return current offsettellp(void)
Input, return current offsettellg(void)
Output, move to the offsetseekp(offset, mode)
Input, move to the offsetseekg(offset, mode)
MeaningName
![Page 21: Slide: 1 Interra Induction Training Object Oriented Programming in C++ IO Streams Kolkata, July 25, 2005](https://reader035.vdocuments.us/reader035/viewer/2022062511/551425a9550346d8488b5a22/html5/thumbnails/21.jpg)
Slide: 21
Examples
• OffsetPositive offset means move forward in the file
Negative offset means move backward in the file
• inFile.seekg(4L,ios::beg)
// go to 5th character in the input file (starts from 0 as // the first character)
• outFile.seekp(4L,ios::beg)
• inFile.seekg(4L,ios::cur)
• outFile.seekp(4L,ios::cur)
• inFile.tellg()
![Page 22: Slide: 1 Interra Induction Training Object Oriented Programming in C++ IO Streams Kolkata, July 25, 2005](https://reader035.vdocuments.us/reader035/viewer/2022062511/551425a9550346d8488b5a22/html5/thumbnails/22.jpg)
Slide: 22
Program#include <fstream.h>
Void main() {
long offset, last; char ch;
ifstream inFile(“test.dat”);
if(inFile.fail()) { // Report error and exit }
inFile.seekg(0L,ios::end); // move to the end of file (mark the offset)
last = inFile.tellg();
// save the offset of the last char (return current offset)
for ( offset = 1L; offset < last; offset++) {
inFile.seekg(-offset, ios::end); // reverse access
ch = inFile.get();
cout << ch << “:”;
}
inFile.close();
}
![Page 23: Slide: 1 Interra Induction Training Object Oriented Programming in C++ IO Streams Kolkata, July 25, 2005](https://reader035.vdocuments.us/reader035/viewer/2022062511/551425a9550346d8488b5a22/html5/thumbnails/23.jpg)
Slide: 23
File Streams as Function Arguments
• File stream objects can be passed as function arguments
• Formal parameter should be a reference to the appropriate stream
• ifstream& or ofstream&
![Page 24: Slide: 1 Interra Induction Training Object Oriented Programming in C++ IO Streams Kolkata, July 25, 2005](https://reader035.vdocuments.us/reader035/viewer/2022062511/551425a9550346d8488b5a22/html5/thumbnails/24.jpg)
Slide: 24
Program#include <fstream.h>
const int MAXLENGTH = 31;
char filename[MAXLENGTH] = “test.dat”;
void inOut(ofstream&); // function prototype
void main()
{
ofstream outFile;
outFile.open(filename);
if(outFile.fail()) { // Report error and exit }
inOut(outFile); // call the function
}
Pass the object reference
![Page 25: Slide: 1 Interra Induction Training Object Oriented Programming in C++ IO Streams Kolkata, July 25, 2005](https://reader035.vdocuments.us/reader035/viewer/2022062511/551425a9550346d8488b5a22/html5/thumbnails/25.jpg)
Slide: 25
Programvoid inOut(ofstream& fileOut)
{
const int LINELEN = 80;
const int NUMLINES = 5;
int count; char line[LINELEN];
cout << “Please enter five lines of text:” << endl;
for(count = 0; count < NUMLINES; count++)
{
cin.getline(line, LINELEN, ‘\n’);
fileOut << line << endl;
}
return;
}
Write on the outFile Stream file passed as reference
![Page 26: Slide: 1 Interra Induction Training Object Oriented Programming in C++ IO Streams Kolkata, July 25, 2005](https://reader035.vdocuments.us/reader035/viewer/2022062511/551425a9550346d8488b5a22/html5/thumbnails/26.jpg)
Slide: 26
Program#include <fstream.h>
int getOpen(ofstream&);
void inOut(ofstream&);
void main()
{
ofstream outFile;
getOpen(outFile); // open the file
inOut(outFile); // call the function
}
![Page 27: Slide: 1 Interra Induction Training Object Oriented Programming in C++ IO Streams Kolkata, July 25, 2005](https://reader035.vdocuments.us/reader035/viewer/2022062511/551425a9550346d8488b5a22/html5/thumbnails/27.jpg)
Slide: 27
Programint getOpen(ofstream& fileOut)
{
const int MAXCHARS = 13;
char name[MAXCHARS];
cout << “Enter a file name : “;
cin.getline(name,MAXCHARS,’\n’);
fileOut.open(name); // open the file
if(fileOut.fail()) {
cout << “The file was not opened successfully” << endl;
exit(1);
}
return 0;
}
![Page 28: Slide: 1 Interra Induction Training Object Oriented Programming in C++ IO Streams Kolkata, July 25, 2005](https://reader035.vdocuments.us/reader035/viewer/2022062511/551425a9550346d8488b5a22/html5/thumbnails/28.jpg)
Slide: 28
Writing to a String Stream
#include <string>#include <strstream>#include <iostream>using namespace std;
void WriteHTMLPage(ostream & stream) { stream << "<HTML>" << endl; stream << " <HEAD>" << endl; stream << " <TITLE>CS 240</TITLE>" << endl; stream << " </HEAD>" << endl; stream << " <BODY>" << endl; stream << " <H1>Welcome to CS 240!</H1>" << endl; stream << " </BODY>" << endl; stream << "</HTML>" << endl;}
int main() { ostrstream stream; WriteHTMLPage(stream); stream << ends; // writes '\0' to the stream cout << stream.str();}
![Page 29: Slide: 1 Interra Induction Training Object Oriented Programming in C++ IO Streams Kolkata, July 25, 2005](https://reader035.vdocuments.us/reader035/viewer/2022062511/551425a9550346d8488b5a22/html5/thumbnails/29.jpg)
Slide: 29
Reading Words From a String Stream
#include <string>#include <strstream>#include <iostream>
int main(int argc, char * argv[]) {istrstream stream(argv[1]);int count = 0;while (true){
string word;stream >> word;if (stream)
++count;else
break;}cout << count << " words" << endl;return 0;
}