Presentation Transcript
C++ :C++ Lecture 8
Monday, 25 August 2005
I/O, File, and Preprocessing :I/O, File, and Preprocessing An in-depth review of stream input/output
File handling in C++
C++ preprocessing
IO Stream Library :IO Stream Library -- basic I/O
-- formatted I/O
-- file
Take a look of iostream.h (at C:\MinGW\include\c++\)
Stream I/O Classes :Stream I/O Classes ios istream ostream iostream ifstream ofstream
Standard Stream Objects :Standard Stream Objects cin – istream class, “tied to” (connected to) the standard input device (keyboard)
cout – ostream class, “tied to” standard output device
cerr – ostream class, standard error output, unbuffered
clog – ostream class, also to standard error, buffered
<< and >> Overloaded Operators :> Overloaded Operators cout << A; // type need not specify
[compare with printf(“%d”, A);]
cout << A << B; // cascading
cout << endl; // newline
cout << flush; // forced buffer flush
Put and Get Member Functions :Put and Get Member Functions cout.put(‘A’); // print a single char
cin.get( ); // get a single char
cin.getline(buffer, SIZE);
// read a line of characters
cin.eof(); // test for end-of-file C.f. Fig. 11.12 (old)
Unformatted I/O :Unformatted I/O cout.write(buffer, SIZE)
cin.read(buffer, SIZE)
The memory contents pointed by buffer is read/write.
In formatted I/O, contents are translated into printable ASCII sequence
Printing in Other Bases :Printing in Other Bases cout << n;
cout << hex << n;
cout << dec << n;
cout << oct << n;
cout << setbase(10) << n;
Format States :Format States setiosflag(iso::S)
Where S can be skipws, left, right, dec, oct, showpoint, uppercase, fixed etc.
Write in a File :Write in a File #include
#include
…
ofstream fileobj(“f.dat”, ios::out); // create output file object
fileobj << data; // output to file
ofstream is derived class from ostream
Read in a File :Read in a File #include
#include
…
ifstream fileobj(“f.dat”, ios::in); // create input file object
fileobj >> data; // read from file
ifstream is derived class of istream C.f. Fig. 14.7
Open and Close File :Open and Close File Using scope rule
{
ofstream myfile(“dat.d”,
ios::out);
myfile << x;
} Explicit open and close
ofstream myfile;
myfile.open(“dat.d”, ios::out);
myfile << x;
myfile.close();
Sequential v.s. Random Access of Files :Sequential v.s. Random Access of Files Normally, cin or cout or file stream is used sequentially
Using the stream member functions seekp( ) and write( ), we can do random file access
Preprocessing :Preprocessing Before sending the source file to the compiler proper, C/C++ passes the source code to preprocessor (e.g., cpp or cc –E on Unix) to process text related to preprocessing derivatives, e.g.
#define …
#include Preprocessor Directive :#include Preprocessor Directive #include // standard
// location
Or
#include “filename” // user
// working directory
A copy of the file is “physically” included
#define Directive :#define Directive #define CURRENT_H
#define PI 3.14159
#define SQ(x) ((x)*(x))
Any identifier in #define is replaced by replacement text
#define Examples :#define Examples #define SQ1(x) ((x)*(x))
#define SQ2(x) x*x
Then
B = SQ1(a+1); C = SQ2(a+2);
becomes
B = ((a+1)*(a+1));
C = a+2*a+2;
Conditional Compilation :Conditional Compilation #if defined(IBM)
… do such and such
#elif // optional
… do …
#else // optional
…
#endif
# and ## Operators :# and ## Operators # converts text to string
## concatenates two tokens
#define H(x) cout << “Hi,” #x
#define C(x,y) x ## y
H(JS); z = C(x, 5);
becomes
cout << “Hi,” “JS”; z = x5;
Tutorial Problems :Tutorial Problems Will the following program works? (Read a string and output the string)
#include
int main()
{ string s;
cin >> s;
cout > s.size() >> endl;
}
A Matrix Class :A Matrix Class Discuss varies possible ways of implementing a matrix class, discuss the issue of efficiency, memory management, operator overloading, etc.