Contents
xv
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++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
The New C++ Headers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Working with an Old Compiler . . . . . . . . . . . . . . . . . . . . . . . 270
Introducing C++ Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
Function Overloading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
Friend Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
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
Static Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
When Constructors and Destructors Are Executed . . . . . . . . . . . . . 317
The Scope Resolution Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
Nested Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
Local Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
Passing Objects to Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
Returning Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
Object Assignment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
13 Arrays, Pointers, References, and the Dynamic
Allocation Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
Arrays of Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
Creating Initialized vs. Uninitialized Arrays . . . . . . . . . . . 328
Pointers to Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
Type Checking C++ Pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332