Wednesday, December 15, 2010

C++:

C++:
C++:
The Complete Reference
Third Edition
About the Author…
Herb Schildt is the leading authority on C and
C++ and a best-selling author whose books
have sold more than 1.5 million copies. His
acclaimed C and C++books include
Yourself C, C++ from the Ground Up, Teach
Yourself C++, C++: The Complete Reference,
Borland C++: The Complete Reference,
Programmer's Reference
Herbert Schildt
Osborne
McGraw-Hill
Berkeley New York St. Louis San Francisco
Auckland Bogotá Hamburg London Madrid
Mexico City Milan Montreal New Delhi Panama City
Paris São Paulo Singapore Sydney
Tokyo Toronto
McGraw-Hill
Contents at a Glance
Part I
1
The Foundation of C++: The C SubsetAn Overview of C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2
Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3
Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4
Arrays and Null-Terminated Strings . . . . . . . . . . . . . . . . 89
5
Pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
6
Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
7
Defined Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Structures, Unions, Enumerations, and User-
8
C-Style Console I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
9
File I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
10
The Preprocessor and Comments . . . . . . . . . . . . . . . . . . . 237
Part II
11
C++An Overview of C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
12
Classes and Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
13
Allocation Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
Arrays, Pointers, References and the Dynamic
14
and Default Arguments . . . . . . . . . . . . . . . . . . . . . . . . 361
Function Overloading, Copy Constructors,
15
Operator Overloading . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
v
16
Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419
17
Virtual Functions and Polymorphism . . . . . . . . . . . . . . 445
18
Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461
19
Exception Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
20
C++ I/O System Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . 511
21
C++ File I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541
22
Run-Time Type ID and the Casting Operators . . . . . . . . 569
23
Advanced Topics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593
Namespaces, Conversion Functions,and Other
24
Introducing the Standard Template Library . . . . . . . . . . 625
Part III
25
The Standard Function LibraryThe C-Based I/O Functions . . . . . . . . . . . . . . . . . . . . . . . . 695
26
The String and Character Functions . . . . . . . . . . . . . . . . . 719
27
The Mathematical Functions . . . . . . . . . . . . . . . . . . . . . . . 733
28
Time, Date, and Localization Functions . . . . . . . . . . . . . . 743
29
The Dynamic Allocation Functions . . . . . . . . . . . . . . . . . . 753
30
Utility Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 757
31
The Wide-Character Functions . . . . . . . . . . . . . . . . . . . . . 771
Part IV
32
The Standard C++ Class LibraryThe Standard C++ I/O Classes . . . . . . . . . . . . . . . . . . . . . 783
33
The STL Container Classes . . . . . . . . . . . . . . . . . . . . . . . . . 807
34
The STL Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 835
35
STL Iterators, Allocators, and Function Objects . . . . . . . 857
36
The String Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 877
37
The Numeric Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 893
38
Exception Handling and Miscellaneous Classes . . . . . . . 921
Part V
39
Applying C++Integrating New Classes: A Custom String Class . . . . . . 931
40
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 995
An Object-Oriented Expression Parser . . . . . . . . . . . . . . . 959
vi
C + + : T h e C o m p l e t e R e f e r e n c e
Contents
Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxix
Part I
The Foundation of C++: The C Subset
1
An Overview of C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
The Origins of C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
C Is a Middle-Level Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
C Is a Structured Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
C Is a Programmer's Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
The Form of a C Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
The Library and Linking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Separate Compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Understanding the .C and .CPP File Extensions . . . . . . . . . . . . . . . . 12
2
Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
The Five Basic Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
vii
Modifying the Basic Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Identifier Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Where Variables Are Declared . . . . . . . . . . . . . . . . . . . . . . . 17
Local Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Formal Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Global Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Access Modifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
const . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
volatile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Storage Class Specifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
extern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
static Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
register Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Variable Initializations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Hexadecimal and Octal Constants . . . . . . . . . . . . . . . . . . . . 32
String Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Backslash Character Constants . . . . . . . . . . . . . . . . . . . . . . . 33
Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
The Assignment Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Type Conversion in Assignments . . . . . . . . . . . . . . . . . . . . . 35
Multiple Assignments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Arithmetic Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Increment and Decrement . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Relational and Logical Operators . . . . . . . . . . . . . . . . . . . . . 39
Bitwise Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
The ? Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
The & and * Pointer Operators . . . . . . . . . . . . . . . . . . . . . . . 47
The Compile-Time Operator sizeof . . . . . . . . . . . . . . . . . . . 49
The Comma Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
The Dot (.) and Arrow (
The [ ] and ( ) Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Precedence Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Order of Evaluation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Type Conversion in Expressions . . . . . . . . . . . . . . . . . . . . . . 53
Casts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Spacing and Parentheses . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Shorthand Assignments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
>) Operators . . . . . . . . . . . . . . . . . 51
3
Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
True and False in C and C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
viii
C + + : T h e C o m p l e t e R e f e r e n c e
Selection Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Nested ifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
The if-else-if Ladder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
The ? Alternative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
The Conditional Expression . . . . . . . . . . . . . . . . . . . . . . . . . . 66
switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Nested switch Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Iteration Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
The for Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
for Loop Variations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
The Infinite Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
for Loops with No Bodies . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
The while Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
The do-while Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Declaring Variables within Selection and Iteration Statements . . . 81
Jump Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
The return Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
The goto Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
The break Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
The exit( ) Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
The continue Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Expression Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Block Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
4
Arrays and Null-Terminated Strings . . . . . . . . . . . . . . . 89
Single-Dimension Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Generating a Pointer to an Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Passing Single-Dimension Arrays to Functions . . . . . . . . . . . . . . . . 92
Null-Terminated Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Two-Dimensional Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Arrays of Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Multidimensional Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Indexing Pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Array Initialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Unsized Array Initializations . . . . . . . . . . . . . . . . . . . . . . . . . 106
A Tic-Tac-Toe Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
5
Pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
What Are Pointers? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Pointer Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
The Pointer Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Pointer Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
C o n t e n t s
ix
Pointer Assignments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Pointer Arithmetic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Pointer Comparisons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Pointers and Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
Arrays of Pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
Multiple Indirection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
Initializing Pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
Pointers to Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
C's Dynamic Allocation Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Problems with Pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
6
Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
The General Form of a Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Scope Rules of Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Function Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Call by Value, Call by Reference . . . . . . . . . . . . . . . . . . . . . . 139
Creating a Call by Reference . . . . . . . . . . . . . . . . . . . . . . . . . 140
Calling Functions with Arrays . . . . . . . . . . . . . . . . . . . . . . . 142
argc and argv—Arguments to main( ) . . . . . . . . . . . . . . . . . . . . . . . . 144
The return Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Returning from a Function . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Returning Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
Returning Pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
Functions of Type void . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
What Does main( ) Return? . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Recursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Function Prototypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Standard Library Function Prototypes . . . . . . . . . . . . . . . . . 157
Declaring Variable-Length Parameter Lists . . . . . . . . . . . . . . . . . . . . 158
Old-Style Versus Modern Function Parameter Declarations . . . . . 158
Implementation Issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Parameters and General-Purpose Functions . . . . . . . . . . . . 159
Efficiency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
7
Defined Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Structures, Unions, Enumerations, and User-
Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
Accessing Structure Members . . . . . . . . . . . . . . . . . . . . . . . . 165
Structure Assignments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
Arrays of Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Passing Structures to Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Passing Structure Members to Functions . . . . . . . . . . . . . . . 167
Passing Entire Structures to Functions . . . . . . . . . . . . . . . . . 167
x
C + + : T h e C o m p l e t e R e f e r e n c e
Structure Pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Declaring a Structure Pointer . . . . . . . . . . . . . . . . . . . . . . . . . 170
Using Structure Pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
Arrays and Structures Within Structures . . . . . . . . . . . . . . . . . . . . . . 173
Bit-Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
Unions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
Enumerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
Using sizeof to Ensure Portability . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
typedef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
8
C-Style Console I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
An Important Application Note . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
Reading and Writing Characters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
A Problem with getchar( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
Alternatives to getchar( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
Reading and Writing Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
Formatted Console I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
printf( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
Printing Characters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
Printing Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
Displaying an Address . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
The %n Specifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
Format Modifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
The Minimum Field Width Specifier . . . . . . . . . . . . . . . . . . 199
The Precision Specifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
Justifying Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
Handling Other Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . 202
The * and # Modifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
scanf( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
Format Specifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
Inputting Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
Inputting Unsigned Integers . . . . . . . . . . . . . . . . . . . . . . . . . 205
Reading Individual Characters Using scanf( ) . . . . . . . . . . 205
Reading Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
Inputting an Address . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
The %n Specifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
Using a Scanset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
Discarding Unwanted White Space . . . . . . . . . . . . . . . . . . . 207
Non-White-Space Characters in the Control String . . . . . . 208
You Must Pass scanf( ) Addresses . . . . . . . . . . . . . . . . . . . . . 208
Format Modifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
Suppressing Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
C o n t e n t s
xi
9
File I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
C Versus C++ File I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
Streams and Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
Text Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Binary Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
File System Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
The File Pointer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Opening a File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Closing a File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Writing a Character . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Reading a Character . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Using fopen( ), getc( ), putc( ), and fclose( ) . . . . . . . . . . . . . 218
Using feof( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
Working with Strings: fputs( ) and fgets( ) . . . . . . . . . . . . . 222
rewind( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
ferror( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
Erasing Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
Flushing a Stream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
fread( ) and fwrite( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
Using fread( ) and fwrite( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
fseek( ) and Random-Access I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
fprintf( ) and fscanf( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
The Standard Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
The Console I/O Connection . . . . . . . . . . . . . . . . . . . . . . . . . 234
Using freopen( ) to Redirect the Standard Streams . . . . . . . . . . . . . 235
10
The Preprocessor and Comments . . . . . . . . . . . . . . . . . . 237
The Preprocessor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
#define . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
Defining Function-like Macros . . . . . . . . . . . . . . . . . . . . . . . 240
#error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
#include . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
Conditional Compilation Directives . . . . . . . . . . . . . . . . . . . . . . . . . . 242
#if, #else, #elif, and #endif . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
#ifdef and #ifndef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
#undef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
Using defined . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
#line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
#pragma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
The # and ## Preprocessor Operators . . . . . . . . . . . . . . . . . . . . . . . . . 248
Predefined Macro Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
xii
C + + : T h e C o m p l e t e R e f e r e n c e
C-Style Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
Part II
C++
11
An Overview of C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
The Origins of C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
What Is Object-Oriented Programming? . . . . . . . . . . . . . . . . . . . . . . 257
Encapsulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
Polymorphism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
Some C++ Fundamentals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
A Sample C++ Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
A Closer Look at the I/O Operators . . . . . . . . . . . . . . . . . . . 263
Declaring Local Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
No Default to int . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
The bool Data Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
Old-Style vs. Modern C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
The New C++ Headers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Working with an Old Compiler . . . . . . . . . . . . . . . . . . . . . . 270
Introducing C++ Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
Function Overloading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
Operator Overloading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Constructors and Destructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
The C++ Keywords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
The General Form of a C++ Program . . . . . . . . . . . . . . . . . . . . . . . . . 288
12
Classes and Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
Structures and Classes Are Related . . . . . . . . . . . . . . . . . . . . . . . . . . 293
Unions and Classes Are Related . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
Anonymous Unions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
Friend Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
Friend Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
Inline Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
Defining Inline Functions Within a Class . . . . . . . . . . . . . . 306
Parameterized Constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
Constructors with One Parameter: A Special Case . . . . . . 309
Static Class Members . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
Static Data Members . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
C o n t e n t s
xiii
Static Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
When Constructors and Destructors Are Executed . . . . . . . . . . . . . 317
The Scope Resolution Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
Nested Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
Local Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
Passing Objects to Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
Returning Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
Object Assignment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
13
Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
Arrays, Pointers, References, and the Dynamic Allocation
Arrays of Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
Creating Initialized vs. Uninitialized Arrays . . . . . . . . . . . 330
Pointers to Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
Type Checking C++ Pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
The this Pointer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
Pointers to Derived Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
Pointers to Class Members . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
Reference Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
Passing References to Objects . . . . . . . . . . . . . . . . . . . . . . . . 345
Returning References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
Independent References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
References to Derived Types . . . . . . . . . . . . . . . . . . . . . . . . . 348
Restrictions to References . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
A Matter of Style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
C++'s Dynamic Allocation Operators . . . . . . . . . . . . . . . . . . . . . . . . . 349
Initializing Allocated Memory . . . . . . . . . . . . . . . . . . . . . . . 351
Allocating Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
Allocating Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
The nothrow Alternative . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
The Placement Forms of new and delete . . . . . . . . . . . . . . . . . . . . . . 359
14
Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
Function Overloading, Copy Constructors, and Default
Function Overloading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
Overloading Constructor Functions . . . . . . . . . . . . . . . . . . . . . . . . . . 364
Overloading a Constructor to Gain Flexibility . . . . . . . . . . 364
Allowing Both Initialized and Uninitialized Objects . . . . . 366
Copy Constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368
Finding the Address of an Overloaded Function . . . . . . . . . . . . . . . 372
The overload Anachronism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
xiv
C + + : T h e C o m p l e t e R e f e r e n c e
Default Function Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
Default Arguments vs. Overloading . . . . . . . . . . . . . . . . . . 378
Using Default Arguments Correctly . . . . . . . . . . . . . . . . . . . 380
Function Overloading and Ambiguity . . . . . . . . . . . . . . . . . . . . . . . . 380
15
Operator Overloading . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
Creating a Member Operator Function . . . . . . . . . . . . . . . . . . . . . . . 386
Creating Prefix and Postfix Forms of the
Increment and Decrement Operators . . . . . . . . . . . . . . . 391
Overloading the Shorthand Operators . . . . . . . . . . . . . . . . . 392
Operator Overloading Restrictions . . . . . . . . . . . . . . . . . . . . 392
Operator Overloading Using a Friend Function . . . . . . . . . . . . . . . . 393
Using a Friend to Overload ++ or – – . . . . . . . . . . . . . . . . . . 395
Friend Operator Functions Add Flexibility . . . . . . . . . . . . . 398
Overloading new and delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
Overloading new and delete for Arrays . . . . . . . . . . . . . . . 405
Overloading the nothrow Version of new and delete . . . . 408
Overloading Some Special Operators . . . . . . . . . . . . . . . . . . . . . . . . . 409
Overloading [ ] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409
Overloading ( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413
Overloading –> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
Overloading the Comma Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . 416
16
Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419
Base-Class Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
Inheritance and protected Members . . . . . . . . . . . . . . . . . . . . . . . . . . 422
Protected Base-Class Inheritance . . . . . . . . . . . . . . . . . . . . . 426
Inheriting Multiple Base Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
Constructors, Destructors, and Inheritance . . . . . . . . . . . . . . . . . . . . 428
When Constructor and Destructor
Functions Are Executed . . . . . . . . . . . . . . . . . . . . . . . . . . . 428
Passing Parameters to Base-Class Constructors . . . . . . . . . 432
Granting Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436
Virtual Base Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
17
Virtual Functions and Polymorphism . . . . . . . . . . . . . . . 445
Virtual Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446
Calling a Virtual Function Through a Base Class
Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
The Virtual Attribute Is Inherited . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450
Virtual Functions Are Hierarchical . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
Pure Virtual Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455
Abstract Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457
C o n t e n t s
xv
Using Virtual Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457
Early vs. Late Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460
18
Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461
Generic Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462
A Function with Two Generic Types . . . . . . . . . . . . . . . . . . 465
Explicitly Overloading a Generic Function . . . . . . . . . . . . . 465
Overloading a Function Template . . . . . . . . . . . . . . . . . . . . 468
Using Standard Parameters with Template Functions . . . 468
Generic Function Restrictions . . . . . . . . . . . . . . . . . . . . . . . . 469
Applying Generic Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470
A Generic Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471
Compacting an Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472
Generic Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474
An Example with Two Generic Data Types . . . . . . . . . . . . 478
Applying Template Classes: A Generic Array Class . . . . . 479
Using Non-Type Arguments with Generic Classes . . . . . . 481
Using Default Arguments with Template Classes . . . . . . . 483
Explicit Class Specializations . . . . . . . . . . . . . . . . . . . . . . . . . 485
The typename and export Keywords . . . . . . . . . . . . . . . . . . . . . . . . . 486
The Power of Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487
19
Exception Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
Exception Handling Fundamentals . . . . . . . . . . . . . . . . . . . . . . . . . . 490
Catching Class Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
Using Multiple catch Statements . . . . . . . . . . . . . . . . . . . . . . 497
Handling Derived-Class Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . 499
Exception Handling Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500
Catching All Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500
Restricting Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
Rethrowing an Exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504
Understanding terminate( ) and unexpected( ) . . . . . . . . . . . . . . . . . 505
Setting the Terminate and Unexpected Handlers . . . . . . . . 506
The uncaught_exception( ) Function . . . . . . . . . . . . . . . . . . . . . . . . . 507
The exception and bad_exception Classes . . . . . . . . . . . . . . . . . . . . . 508
Applying Exception Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508
20
The C++ I/O System Basics . . . . . . . . . . . . . . . . . . . . . . . 511
Old vs. Modern C++ I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512
C++ Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513
The C++ Stream Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513
C++'s Predefined Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . 514
Formatted I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515
xvi
C + + : T h e C o m p l e t e R e f e r e n c e
Formatting Using the ios Members . . . . . . . . . . . . . . . . . . . . 515
Setting the Format Flags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516
Clearing Format Flags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517
An Overloaded Form of setf( ) . . . . . . . . . . . . . . . . . . . . . . . . 518
Examining the Formatting Flags . . . . . . . . . . . . . . . . . . . . . . 520
Setting All Flags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521
Using width( ), precision( ), and fill( ) . . . . . . . . . . . . . . . . . 522
Using Manipulators to Format I/O . . . . . . . . . . . . . . . . . . . 524
Overloading << and >> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 528
Creating Your Own Inserters . . . . . . . . . . . . . . . . . . . . . . . . . 528
Creating Your Own Extractors . . . . . . . . . . . . . . . . . . . . . . . 534
Creating Your Own Manipulator Functions . . . . . . . . . . . . . . . . . . . 537
21
C++ File I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541
<fstream> and the File Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542
Opening and Closing a File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542
Reading and Writing Text Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545
Unformatted and Binary I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547
Characters vs. Bytes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547
put( ) and get( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548
read( ) and write( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550
More get( ) Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553
getline( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553
Detecting EOF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555
The ignore( ) Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557
peek( ) and putback( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558
flush( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558
Random Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559
Obtaining the Current File Position . . . . . . . . . . . . . . . . . . . 563
I/O Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563
Customized I/O and Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565
22
Run-Time Type ID and the Casting Operators . . . . . . . 569
Run-Time Type Identification (RTTI) . . . . . . . . . . . . . . . . . . . . . . . . . 570
A Simple Application of Run-Time Type ID . . . . . . . . . . . . 576
typeid Can Be Applied to Template Classes . . . . . . . . . . . . 578
The Casting Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 580
dynamic_cast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 580
Replacing typeid with dynamic_cast . . . . . . . . . . . . . . . . . . 584
Using dynamic_cast with Template Classes . . . . . . . . . . . . 586
const_cast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588
static_cast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590
reinterpret_cast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590
C o n t e n t s
xvii
23
and Other Advanced Topics . . . . . . . . . . . . . . . . . . . . . 593
Namespaces, Conversion Functions,
Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594
Namespace Fundamentals . . . . . . . . . . . . . . . . . . . . . . . . . . . 594
using . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 598
Unnamed Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 600
Some Namespace Options . . . . . . . . . . . . . . . . . . . . . . . . . . . 601
The std Namespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603
Creating Conversion Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605
const Member Functions and mutable . . . . . . . . . . . . . . . . . . . . . . . . 609
Volatile Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611
Explicit Constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612
Using the asm Keyword . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613
Linkage Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 614
Array-Based I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615
The Array-Based Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 616
Creating an Array-Based Output Stream . . . . . . . . . . . . . . . 616
Using an Array as Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 618
Input/Output Array-Based Streams . . . . . . . . . . . . . . . . . . 620
Using Dynamic Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621
Using Binary I/O with Array-Based Streams . . . . . . . . . . . . . . . . . . 622
Summarizing the Differences
Between C and C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623
24
Introducing the Standard Template Library . . . . . . . . . 625
An Overview of the STL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626
Containers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626
Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627
Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627
Other STL Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 628
The Container Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629
General Theory of Operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 630
Vectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 631
Accessing a Vector Through an Iterator . . . . . . . . . . . . . . . . 635
Inserting and Deleting Elements in a Vector . . . . . . . . . . . . 637
Storing Class Objects in a Vector . . . . . . . . . . . . . . . . . . . . . . 639
Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 641
Understanding end( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645
push_front( ) vs push_back( ) . . . . . . . . . . . . . . . . . . . . . . . . 647
Sort a List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648
Merging One List with Another . . . . . . . . . . . . . . . . . . . . . . 649
Storing Class Objects in a List . . . . . . . . . . . . . . . . . . . . . . . . 651
Maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654
xviii
C + + : T h e C o m p l e t e R e f e r e n c e
Storing Class Objects In a Map . . . . . . . . . . . . . . . . . . . . . . . 658
Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 660
Counting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 660
Removing and Replacing Elements . . . . . . . . . . . . . . . . . . . 666
Reversing a Sequence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668
Transforming a Sequence . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669
Using Function Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671
Unary and Binary Function Objects . . . . . . . . . . . . . . . . . . . 671
Using the Built-in Function Objects . . . . . . . . . . . . . . . . . . . 671
Creating a Function Object . . . . . . . . . . . . . . . . . . . . . . . . . . . 674
Using Binders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676
The string Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 679
Some string Member Functions . . . . . . . . . . . . . . . . . . . . . . . 683
Strings Are Containers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689
Putting Strings into Other Containers . . . . . . . . . . . . . . . . . 690
Final Thoughts on the STL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691
Part III
The Standard Function Library
25
The C-Based I/O Functions . . . . . . . . . . . . . . . . . . . . . . . 695
clearerr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 696
fclose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697
feof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697
ferror . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697
fflush . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 698
fgetc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 698
fgetpos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 698
fgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699
fopen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699
fprintf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 701
fputc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 701
fputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 702
fread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 702
freopen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 702
fscanf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703
fseek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703
fsetpos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 704
ftell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 704
fwrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 705
getc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 705
getchar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 706
gets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 706
C o n t e n t s
xix
perror . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 706
printf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 707
putc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 710
putchar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 710
puts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 710
remove . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 711
rename . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 711
rewind . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 711
scanf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 711
setbuf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 715
setvbuf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 715
sprintf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716
sscanf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716
tmpfile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716
tmpnam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717
ungetc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717
vprintf, vfprintf, and vsprintf . . . . . . . . . . . . . . . . . . . . . . . . 718
26
The String and Character Functions . . . . . . . . . . . . . . . . 719
isalnum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 720
isalpha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 720
iscntrl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 721
isdigit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 721
isgraph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 721
islower . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 721
isprint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 722
ispunct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 722
isspace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 722
isupper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723
isxdigit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723
memchr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723
memcmp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723
memcpy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 724
memmove . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 724
memset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725
strcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725
strchr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725
strcmp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 726
strcoll . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 726
strcpy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 727
strcspn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 727
strerror . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 727
strlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 727
xx
C + + : T h e C o m p l e t e R e f e r e n c e
strncat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 728
strncmp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 728
strncpy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 729
strpbrk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 729
strrchr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 729
strspn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 730
strstr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 730
strtok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 730
strxfrm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 731
tolower . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 731
toupper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 731
27
The Mathematical Functions . . . . . . . . . . . . . . . . . . . . . . 733
acos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734
asin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734
atan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735
atan2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735
ceil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735
cos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 736
cosh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 736
exp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 736
fabs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737
floor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737
fmod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737
frexp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737
ldexp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 738
log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 738
log10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 738
modf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 739
pow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 739
sin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 739
sinh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 740
sqrt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 740
tan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 740
tanh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 741
28
Time, Date, and Localization Functions . . . . . . . . . . . . . 743
asctime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 744
clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 745
ctime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 745
difftime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746
gmtime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746
localeconv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746
http://www.niit.com/
Teachand C++to name a few.

No comments:

Post a Comment

THE WORLD NEW TECHNOLOGY