220 likes | 373 Views
C++. Lecture 8 Monday, 25 August 2005. I/O, File, and Preprocessing. An in-depth review of stream input/output File handling in C++ C++ preprocessing. IO Stream Library. <iostream> -- basic I/O <iomanip> -- formatted I/O <fstream> -- file
E N D
C++ Lecture 8 Monday, 25 August 2005
I/O, File, and Preprocessing • An in-depth review of stream input/output • File handling in C++ • C++ preprocessing
IO Stream Library • <iostream> -- basic I/O • <iomanip> -- formatted I/O • <fstream> -- file • Take a look of iostream.h (at C:\MinGW\include\c++\)
Stream I/O Classes ios istream ostream iostream ifstream ofstream
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 • 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 • 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 • 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 • cout << n; • cout << hex << n; • cout << dec << n; • cout << oct << n; • cout << setbase(10) << n;
Format States • setiosflag(iso::S) • Where S can be skipws, left, right, dec, oct, showpoint, uppercase, fixed etc.
Write in a File • #include <iostream> • #include <fstream> • … • 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 • #include <iostream> • #include <fstream> • … • 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
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(); Open and Close File
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 • 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 <filename> // standard // location • Or • #include “filename” // user // working directory • A copy of the file is “physically” included
#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 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 #if defined(IBM) … do such and such #elif // optional … do … #else // optional … #endif
# 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 • Will the following program works? (Read a string and output the string) #include <string> int main() { string s; cin >> s; cout << “length of the string is ” >> s.size() >> endl; }
A Matrix Class • Discuss varies possible ways of implementing a matrix class, discuss the issue of efficiency, memory management, operator overloading, etc.