SlideShare a Scribd company logo
1 of 1041
Download to read offline
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 Teach
 Yourself C, C++ from the Ground Up, Teach
 Yourself C++, C++: The Complete Reference,
 Borland C++: The Complete Reference, and C++
 Programmer's Reference to name a few.
C++:
The Complete Reference
          Third Edition

                                    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
                   abc
Copyright © 1998 by McGraw-Hill Companies. All rights reserved. Manufactured in the United States of America. Except as permitted
under the United States Copyright Act of 1976, no part of this publication may be reproduced or distributed in any form or by any means,
or stored in a database or retrieval system, without the prior written permission of the publisher.

0-07-213293-0

The material in this eBook also appears in the print version of this title: 0-07-882476-1




All trademarks are trademarks of their respective owners. Rather than put a trademark symbol after every occurrence of a trademarked
name, we use names in an editorial fashion only, and to the benefit of the trademark owner, with no intention of infringement of the
trademark. Where such designations appear in this book, they have been printed with initial caps.
McGraw-Hill eBooks are available at special quantity discounts to use as premiums and sales promotions, or for use in corporate train-
ing programs. For more information, please contact George Hoare, Special Sales, at george_hoare@mcgraw-hill.com or (212) 904-
4069.


TERMS OF USE
This is a copyrighted work and The McGraw-Hill Companies, Inc. (“McGraw-Hill”) and its licensors reserve all rights in and to the
work. Use of this work is subject to these terms. Except as permitted under the Copyright Act of 1976 and the right to store and retrieve
one copy of the work, you may not decompile, disassemble, reverse engineer, reproduce, modify, create derivative works based upon,
transmit, distribute, disseminate, sell, publish or sublicense the work or any part of it without McGraw-Hill’s prior consent. You may
use the work for your own noncommercial and personal use; any other use of the work is strictly prohibited. Your right to use the work
may be terminated if you fail to comply with these terms.
THE WORK IS PROVIDED “AS IS”. McGRAW-HILL AND ITS LICENSORS MAKE NO GUARANTEES OR WARRANTIES AS
TO THE ACCURACY, ADEQUACY OR COMPLETENESS OF OR RESULTS TO BE OBTAINED FROM USING THE WORK,
INCLUDING ANY INFORMATION THAT CAN BE ACCESSED THROUGH THE WORK VIA HYPERLINK OR OTHERWISE,
AND EXPRESSLY DISCLAIM ANY WARRANTY, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO IMPLIED
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. McGraw-Hill and its licensors do not
warrant or guarantee that the functions contained in the work will meet your requirements or that its operation will be uninterrupted or
error free. Neither McGraw-Hill nor its licensors shall be liable to you or anyone else for any inaccuracy, error or omission, regardless
of cause, in the work or for any damages resulting therefrom. McGraw-Hill has no responsibility for the content of any information
accessed through the work. Under no circumstances shall McGraw-Hill and/or its licensors be liable for any indirect, incidental, spe-
cial, punitive, consequential or similar damages that result from the use of or inability to use the work, even if any of them has been
advised of the possibility of such damages. This limitation of liability shall apply to any claim or cause whatsoever whether such claim
or cause arises in contract, tort or otherwise.

DOI: 10.1036/0072132930
Contents at a Glance
Part I The Foundation of C++: The C Subset

     1An Overview of C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .               3
     2Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .       13
     3Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      57
     4Arrays and Null-Terminated Strings . . . . . . . . . . . . . . . .                            89
     5Pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   113
     6Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    137
     7Structures, Unions, Enumerations, and User-
         Defined Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .         161
    8 C-Style Console I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .              187
    9 File I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   211
   10 The Preprocessor and Comments . . . . . . . . . . . . . . . . . . .                          237


Part II C++

   11 An Overview of C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                 255
   12 Classes and Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .          289
   13 Arrays, Pointers, References and the Dynamic
        Allocation Operators . . . . . . . . . . . . . . . . . . . . . . . . . . .                 327
   14 Function Overloading, Copy Constructors,
        and Default Arguments . . . . . . . . . . . . . . . . . . . . . . . .                      361
   15 Operator Overloading . . . . . . . . . . . . . . . . . . . . . . . . . . . .                 385




                                                 v
vi   C++: The Complete Reference



          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 Namespaces, Conversion Functions,and Other
               Advanced Topics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                 593
          24 Introducing the Standard Template Library . . . . . . . . . .                                   625


      Part III The Standard Function Library

          25     The 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 The Standard C++ Class Library

          32     The 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 Applying C++

          39 Integrating New Classes: A Custom String Class . . . . . .                                      931
          40 An Object-Oriented Expression Parser . . . . . . . . . . . . . . .                              959
             Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   995
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
viii   C++: The Complete Reference


                 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 (−>) Operators . . . . . . . . . . . . . . . . .                               51
                          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

             3   Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                        57
                 True and False in C and C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                   58
Contents      ix


    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
x   C++: The Complete Reference


                        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   Structures, Unions, Enumerations, and User-
                Defined Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                              161
              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
Contents      xi


    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
xii   C++: The Complete Reference



            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
Contents      xiii


     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
xiv   C++: The Complete Reference


                        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   Arrays, Pointers, References, and the Dynamic Allocation
                  Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
                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   Function Overloading, Copy Constructors, and Default
                  Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                          361
                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
Contents      xv


     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
xvi   C++: The Complete Reference


                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
Contents      xvii


             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
xviii   C++: The Complete Reference



             23   Namespaces, Conversion Functions,
                   and Other Advanced Topics . . . . . . . . . . . . . . . . . . . . .                                              593
                  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
Contents      xix


             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
xx   C++: The Complete Reference


                       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
Contents      xxi


             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
xxii   C++: The Complete Reference


                           localtime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .        748
                           mktime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .         748
                           setlocale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      748
                           strftime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .       749
                           time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .     750

            29   The Dynamic Allocation Functions . . . . . . . . . . . . . . . . .                                             753
                           calloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .     754
                           free . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   754
                           malloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .       755
                           realloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      755

            30   Utility Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                            757
                           abort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    758
                           abs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    758
                           assert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .     759
                           atexit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .     759
                           atof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   759
                           atoi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   760
                           atol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   760
                           bsearch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      760
                           div . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    761
                           exit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   762
                           getenv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .       762
                           labs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   762
                           ldiv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   763
                           longjmp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .        763
                           mblen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      763
                           mbstowcs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .           764
                           mbtowc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .         764
                           qsort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    764
                           raise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    765
                           rand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .     766
                           setjmp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .       766
                           signal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .     766
                           srand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      767
                           strtod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .     767
                           strtol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   768
                           strtoul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      768
                           system . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .       769
                           va_arg, va_start, and va_end . . . . . . . . . . . . . . . . . . . . . . . . .                       769
                           wcstombs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .           770
                           wctomb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .         770
Contents      xxiii


31   The Wide-Character Functions . . . . . . . . . . . . . . . . . . . . .                                         771
     The Wide-Character Classification Functions . . . . . . . . . . . . . . . . . .                                772
     The Wide-Character I/O Functions . . . . . . . . . . . . . . . . . . . . . . . . . .                           775
     The Wide-Character String Functions . . . . . . . . . . . . . . . . . . . . . . . .                            775
     Wide-Character String Conversion Functions . . . . . . . . . . . . . . . . . .                                 775
     Wide-Character Array Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . .                         778
     Multibyte/Wide-Character Conversion Functions . . . . . . . . . . . . .                                        779

                                                Part IV
                            The Standard C++ Class Library

32   The Standard C++ I/O Classes . . . . . . . . . . . . . . . . . . . .                                           783
     The I/O Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .          784
     The I/O Headers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .            786
     The Format Flags and I/O Manipulators . . . . . . . . . . . . . . . . . . . . . .                              787
     Several Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .             789
             The streamsize and streamoff Types . . . . . . . . . . . . . . . . . .                                 789
             The streampos and wstreampos Types . . . . . . . . . . . . . . . .                                     789
             The pos_type and off_type Types . . . . . . . . . . . . . . . . . . . . .                              789
             The openmode Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                      789
             The iostate Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .               790
             The seekdir type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .               790
             The failure Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                790
     Overload << and >> Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                       790
     The General-Purpose I/O Functions . . . . . . . . . . . . . . . . . . . . . . . . .                            791
             bad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      791
             clear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      791
             eof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    791
             exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .           792
             fail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .     792
             fill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   792
             flags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      793
             flush . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      793
             fstream, ifstream, and ofstream . . . . . . . . . . . . . . . . . . . . . . .                          793
             gcount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .         794
             get . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    794
             getline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .        795
             good . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .       796
             ignore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .       796
             open . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .       796
             peek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .       797
             precision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .          798
xxiv   C++: The Complete Reference


                              put . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .     798
                              putback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .         798
                              rdstate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .       798
                              read . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      799
                              readsome . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .          799
                              seekg and seekp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .               800
                              setf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    801
                              setstate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      801
                              str . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   802
                              stringstream, istringstream, ostringstream . . . . . . . . . . . . .                                  802
                              sync_with_stdio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .               803
                              tellg and tellp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .           804
                              unsetf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      804
                              width . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .       804
                              write . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .     805

            33   The STL Container Classes . . . . . . . . . . . . . . . . . . . . . . . .                                          807
                 The Container Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                  808
                        bitset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .            810
                        deque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .             812
                        list . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .        815
                        map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .             818
                        multimap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                820
                        multiset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .              823
                        queue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .             825
                        priority_queue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                    826
                        set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .         827
                        stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .           829
                        vector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .            830

            34   The STL Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                     835
                              adjacent_find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .             836
                              binary_search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .             836
                              copy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      837
                              copy_backward . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                 837
                              count . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .       837
                              count_if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .        838
                              equal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .       838
                              equal_range . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .             838
                              fill and fill_n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .         839
                              find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    839
                              find_end . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .          839
                              find_first_of . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .           839
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference
C++ complete reference

More Related Content

What's hot

Uni leicester
Uni leicesterUni leicester
Uni leicesterN/A
 
Swf File Format Spec V10
Swf File Format Spec V10Swf File Format Spec V10
Swf File Format Spec V10losalamos
 
Design Report_Group 5 (Final)
Design Report_Group 5 (Final)Design Report_Group 5 (Final)
Design Report_Group 5 (Final)Ayman Siddique
 
Introduction to Programming Using Java v. 7 - David J Eck - Inglês
Introduction to Programming Using Java v. 7 - David J Eck - InglêsIntroduction to Programming Using Java v. 7 - David J Eck - Inglês
Introduction to Programming Using Java v. 7 - David J Eck - InglêsMarcelo Negreiros
 
Palo alto-3.1 administrators-guide
Palo alto-3.1 administrators-guidePalo alto-3.1 administrators-guide
Palo alto-3.1 administrators-guideSornchai Saen
 
Call pilot call center setup and operation
Call pilot call center setup and operationCall pilot call center setup and operation
Call pilot call center setup and operationkyawzay htet
 
Cloud Infrastructure Architecture Case Study
Cloud Infrastructure Architecture Case StudyCloud Infrastructure Architecture Case Study
Cloud Infrastructure Architecture Case StudyEMC
 
Manual flash
Manual flashManual flash
Manual flashRui Silva
 

What's hot (18)

Uni leicester
Uni leicesterUni leicester
Uni leicester
 
Swf File Format Spec V10
Swf File Format Spec V10Swf File Format Spec V10
Swf File Format Spec V10
 
Design Report_Group 5 (Final)
Design Report_Group 5 (Final)Design Report_Group 5 (Final)
Design Report_Group 5 (Final)
 
sg246506
sg246506sg246506
sg246506
 
Introduction to Programming Using Java v. 7 - David J Eck - Inglês
Introduction to Programming Using Java v. 7 - David J Eck - InglêsIntroduction to Programming Using Java v. 7 - David J Eck - Inglês
Introduction to Programming Using Java v. 7 - David J Eck - Inglês
 
Dvba pg
Dvba pgDvba pg
Dvba pg
 
Palo alto-3.1 administrators-guide
Palo alto-3.1 administrators-guidePalo alto-3.1 administrators-guide
Palo alto-3.1 administrators-guide
 
tutorial.pdf
tutorial.pdftutorial.pdf
tutorial.pdf
 
Manual Civil 3d Ingles
Manual Civil 3d InglesManual Civil 3d Ingles
Manual Civil 3d Ingles
 
Call pilot call center setup and operation
Call pilot call center setup and operationCall pilot call center setup and operation
Call pilot call center setup and operation
 
Smarty 2
Smarty 2Smarty 2
Smarty 2
 
Link planneruserguide.3.3.3
Link planneruserguide.3.3.3Link planneruserguide.3.3.3
Link planneruserguide.3.3.3
 
Mb ug
Mb ugMb ug
Mb ug
 
Cloud Infrastructure Architecture Case Study
Cloud Infrastructure Architecture Case StudyCloud Infrastructure Architecture Case Study
Cloud Infrastructure Architecture Case Study
 
Link planner userguide.3.3.1
Link planner userguide.3.3.1Link planner userguide.3.3.1
Link planner userguide.3.3.1
 
Javanotes6 linked
Javanotes6 linkedJavanotes6 linked
Javanotes6 linked
 
Manual flash
Manual flashManual flash
Manual flash
 
Threading
ThreadingThreading
Threading
 

Similar to C++ complete reference

C++ annotations version
C++ annotations versionC++ annotations version
C++ annotations versionPL Sharma
 
Mastering Oracle PL/SQL: Practical Solutions
Mastering Oracle PL/SQL: Practical SolutionsMastering Oracle PL/SQL: Practical Solutions
Mastering Oracle PL/SQL: Practical SolutionsMURTHYVENKAT2
 
C++ For Quantitative Finance
C++ For Quantitative FinanceC++ For Quantitative Finance
C++ For Quantitative FinanceASAD ALI
 
Ref arch for ve sg248155
Ref arch for ve sg248155Ref arch for ve sg248155
Ref arch for ve sg248155Accenture
 
Best Python tutorial (release 3.7.0)
Best Python tutorial (release 3.7.0)Best Python tutorial (release 3.7.0)
Best Python tutorial (release 3.7.0)youssef bouferdou
 
0802 python-tutorial
0802 python-tutorial0802 python-tutorial
0802 python-tutorialZahid Hasan
 
Optimizing oracle-on-sun-cmt-platform
Optimizing oracle-on-sun-cmt-platformOptimizing oracle-on-sun-cmt-platform
Optimizing oracle-on-sun-cmt-platformSal Marcus
 
python learn basic tutorial learn easy..
python learn basic tutorial learn easy..python learn basic tutorial learn easy..
python learn basic tutorial learn easy..MURTHYVENKAT2
 
Modelsim Tuttranslate
Modelsim TuttranslateModelsim Tuttranslate
Modelsim Tuttranslateguest2d20022
 
irmpg_3.7_python_202301.pdf
irmpg_3.7_python_202301.pdfirmpg_3.7_python_202301.pdf
irmpg_3.7_python_202301.pdfFernandoBello39
 
Apache Spark In 24 Hrs
Apache Spark In 24 HrsApache Spark In 24 Hrs
Apache Spark In 24 HrsJim Jimenez
 

Similar to C++ complete reference (20)

C++ annotations version
C++ annotations versionC++ annotations version
C++ annotations version
 
Mastering Oracle PL/SQL: Practical Solutions
Mastering Oracle PL/SQL: Practical SolutionsMastering Oracle PL/SQL: Practical Solutions
Mastering Oracle PL/SQL: Practical Solutions
 
plsqladvanced.pdf
plsqladvanced.pdfplsqladvanced.pdf
plsqladvanced.pdf
 
C++ For Quantitative Finance
C++ For Quantitative FinanceC++ For Quantitative Finance
C++ For Quantitative Finance
 
Ref arch for ve sg248155
Ref arch for ve sg248155Ref arch for ve sg248155
Ref arch for ve sg248155
 
Tso clist unknown
Tso clist   unknownTso clist   unknown
Tso clist unknown
 
Best Python tutorial (release 3.7.0)
Best Python tutorial (release 3.7.0)Best Python tutorial (release 3.7.0)
Best Python tutorial (release 3.7.0)
 
Tutorial edit
Tutorial editTutorial edit
Tutorial edit
 
0802 python-tutorial
0802 python-tutorial0802 python-tutorial
0802 python-tutorial
 
0802 python-tutorial
0802 python-tutorial0802 python-tutorial
0802 python-tutorial
 
Python everthing
Python everthingPython everthing
Python everthing
 
Optimizing oracle-on-sun-cmt-platform
Optimizing oracle-on-sun-cmt-platformOptimizing oracle-on-sun-cmt-platform
Optimizing oracle-on-sun-cmt-platform
 
Cake php cookbook
Cake php cookbookCake php cookbook
Cake php cookbook
 
python learn basic tutorial learn easy..
python learn basic tutorial learn easy..python learn basic tutorial learn easy..
python learn basic tutorial learn easy..
 
Advanced macro guide
Advanced macro guideAdvanced macro guide
Advanced macro guide
 
Hats guia de_macro
Hats guia de_macroHats guia de_macro
Hats guia de_macro
 
Modelsim Tuttranslate
Modelsim TuttranslateModelsim Tuttranslate
Modelsim Tuttranslate
 
irmpg_3.7_python_202301.pdf
irmpg_3.7_python_202301.pdfirmpg_3.7_python_202301.pdf
irmpg_3.7_python_202301.pdf
 
Apache Spark In 24 Hrs
Apache Spark In 24 HrsApache Spark In 24 Hrs
Apache Spark In 24 Hrs
 
Rlecturenotes
RlecturenotesRlecturenotes
Rlecturenotes
 

Recently uploaded

Unit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptxUnit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptxVishalSingh1417
 
Beyond the EU: DORA and NIS 2 Directive's Global Impact
Beyond the EU: DORA and NIS 2 Directive's Global ImpactBeyond the EU: DORA and NIS 2 Directive's Global Impact
Beyond the EU: DORA and NIS 2 Directive's Global ImpactPECB
 
Disha NEET Physics Guide for classes 11 and 12.pdf
Disha NEET Physics Guide for classes 11 and 12.pdfDisha NEET Physics Guide for classes 11 and 12.pdf
Disha NEET Physics Guide for classes 11 and 12.pdfchloefrazer622
 
A Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy ReformA Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy ReformChameera Dedduwage
 
Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17Celine George
 
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...christianmathematics
 
Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)eniolaolutunde
 
IGNOU MSCCFT and PGDCFT Exam Question Pattern: MCFT003 Counselling and Family...
IGNOU MSCCFT and PGDCFT Exam Question Pattern: MCFT003 Counselling and Family...IGNOU MSCCFT and PGDCFT Exam Question Pattern: MCFT003 Counselling and Family...
IGNOU MSCCFT and PGDCFT Exam Question Pattern: MCFT003 Counselling and Family...PsychoTech Services
 
Grant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy ConsultingGrant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy ConsultingTechSoup
 
Accessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impactAccessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impactdawncurless
 
Sanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdfSanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdfsanyamsingh5019
 
Sports & Fitness Value Added Course FY..
Sports & Fitness Value Added Course FY..Sports & Fitness Value Added Course FY..
Sports & Fitness Value Added Course FY..Disha Kariya
 
General AI for Medical Educators April 2024
General AI for Medical Educators April 2024General AI for Medical Educators April 2024
General AI for Medical Educators April 2024Janet Corral
 
Web & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdfWeb & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdfJayanti Pande
 
APM Welcome, APM North West Network Conference, Synergies Across Sectors
APM Welcome, APM North West Network Conference, Synergies Across SectorsAPM Welcome, APM North West Network Conference, Synergies Across Sectors
APM Welcome, APM North West Network Conference, Synergies Across SectorsAssociation for Project Management
 
Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104misteraugie
 
social pharmacy d-pharm 1st year by Pragati K. Mahajan
social pharmacy d-pharm 1st year by Pragati K. Mahajansocial pharmacy d-pharm 1st year by Pragati K. Mahajan
social pharmacy d-pharm 1st year by Pragati K. Mahajanpragatimahajan3
 
Ecosystem Interactions Class Discussion Presentation in Blue Green Lined Styl...
Ecosystem Interactions Class Discussion Presentation in Blue Green Lined Styl...Ecosystem Interactions Class Discussion Presentation in Blue Green Lined Styl...
Ecosystem Interactions Class Discussion Presentation in Blue Green Lined Styl...fonyou31
 
microwave assisted reaction. General introduction
microwave assisted reaction. General introductionmicrowave assisted reaction. General introduction
microwave assisted reaction. General introductionMaksud Ahmed
 

Recently uploaded (20)

Unit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptxUnit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptx
 
Beyond the EU: DORA and NIS 2 Directive's Global Impact
Beyond the EU: DORA and NIS 2 Directive's Global ImpactBeyond the EU: DORA and NIS 2 Directive's Global Impact
Beyond the EU: DORA and NIS 2 Directive's Global Impact
 
Disha NEET Physics Guide for classes 11 and 12.pdf
Disha NEET Physics Guide for classes 11 and 12.pdfDisha NEET Physics Guide for classes 11 and 12.pdf
Disha NEET Physics Guide for classes 11 and 12.pdf
 
A Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy ReformA Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy Reform
 
Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17
 
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
 
Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)
 
IGNOU MSCCFT and PGDCFT Exam Question Pattern: MCFT003 Counselling and Family...
IGNOU MSCCFT and PGDCFT Exam Question Pattern: MCFT003 Counselling and Family...IGNOU MSCCFT and PGDCFT Exam Question Pattern: MCFT003 Counselling and Family...
IGNOU MSCCFT and PGDCFT Exam Question Pattern: MCFT003 Counselling and Family...
 
Grant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy ConsultingGrant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy Consulting
 
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
 
Accessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impactAccessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impact
 
Sanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdfSanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdf
 
Sports & Fitness Value Added Course FY..
Sports & Fitness Value Added Course FY..Sports & Fitness Value Added Course FY..
Sports & Fitness Value Added Course FY..
 
General AI for Medical Educators April 2024
General AI for Medical Educators April 2024General AI for Medical Educators April 2024
General AI for Medical Educators April 2024
 
Web & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdfWeb & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdf
 
APM Welcome, APM North West Network Conference, Synergies Across Sectors
APM Welcome, APM North West Network Conference, Synergies Across SectorsAPM Welcome, APM North West Network Conference, Synergies Across Sectors
APM Welcome, APM North West Network Conference, Synergies Across Sectors
 
Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104
 
social pharmacy d-pharm 1st year by Pragati K. Mahajan
social pharmacy d-pharm 1st year by Pragati K. Mahajansocial pharmacy d-pharm 1st year by Pragati K. Mahajan
social pharmacy d-pharm 1st year by Pragati K. Mahajan
 
Ecosystem Interactions Class Discussion Presentation in Blue Green Lined Styl...
Ecosystem Interactions Class Discussion Presentation in Blue Green Lined Styl...Ecosystem Interactions Class Discussion Presentation in Blue Green Lined Styl...
Ecosystem Interactions Class Discussion Presentation in Blue Green Lined Styl...
 
microwave assisted reaction. General introduction
microwave assisted reaction. General introductionmicrowave assisted reaction. General introduction
microwave assisted reaction. General introduction
 

C++ complete reference

  • 1.
  • 3. 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 Teach Yourself C, C++ from the Ground Up, Teach Yourself C++, C++: The Complete Reference, Borland C++: The Complete Reference, and C++ Programmer's Reference to name a few.
  • 4. C++: The Complete Reference Third Edition 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
  • 5. McGraw-Hill abc Copyright © 1998 by McGraw-Hill Companies. All rights reserved. Manufactured in the United States of America. Except as permitted under the United States Copyright Act of 1976, no part of this publication may be reproduced or distributed in any form or by any means, or stored in a database or retrieval system, without the prior written permission of the publisher. 0-07-213293-0 The material in this eBook also appears in the print version of this title: 0-07-882476-1 All trademarks are trademarks of their respective owners. Rather than put a trademark symbol after every occurrence of a trademarked name, we use names in an editorial fashion only, and to the benefit of the trademark owner, with no intention of infringement of the trademark. Where such designations appear in this book, they have been printed with initial caps. McGraw-Hill eBooks are available at special quantity discounts to use as premiums and sales promotions, or for use in corporate train- ing programs. For more information, please contact George Hoare, Special Sales, at george_hoare@mcgraw-hill.com or (212) 904- 4069. TERMS OF USE This is a copyrighted work and The McGraw-Hill Companies, Inc. (“McGraw-Hill”) and its licensors reserve all rights in and to the work. Use of this work is subject to these terms. Except as permitted under the Copyright Act of 1976 and the right to store and retrieve one copy of the work, you may not decompile, disassemble, reverse engineer, reproduce, modify, create derivative works based upon, transmit, distribute, disseminate, sell, publish or sublicense the work or any part of it without McGraw-Hill’s prior consent. You may use the work for your own noncommercial and personal use; any other use of the work is strictly prohibited. Your right to use the work may be terminated if you fail to comply with these terms. THE WORK IS PROVIDED “AS IS”. McGRAW-HILL AND ITS LICENSORS MAKE NO GUARANTEES OR WARRANTIES AS TO THE ACCURACY, ADEQUACY OR COMPLETENESS OF OR RESULTS TO BE OBTAINED FROM USING THE WORK, INCLUDING ANY INFORMATION THAT CAN BE ACCESSED THROUGH THE WORK VIA HYPERLINK OR OTHERWISE, AND EXPRESSLY DISCLAIM ANY WARRANTY, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. McGraw-Hill and its licensors do not warrant or guarantee that the functions contained in the work will meet your requirements or that its operation will be uninterrupted or error free. Neither McGraw-Hill nor its licensors shall be liable to you or anyone else for any inaccuracy, error or omission, regardless of cause, in the work or for any damages resulting therefrom. McGraw-Hill has no responsibility for the content of any information accessed through the work. Under no circumstances shall McGraw-Hill and/or its licensors be liable for any indirect, incidental, spe- cial, punitive, consequential or similar damages that result from the use of or inability to use the work, even if any of them has been advised of the possibility of such damages. This limitation of liability shall apply to any claim or cause whatsoever whether such claim or cause arises in contract, tort or otherwise. DOI: 10.1036/0072132930
  • 6. Contents at a Glance Part I The Foundation of C++: The C Subset 1An Overview of C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 4Arrays and Null-Terminated Strings . . . . . . . . . . . . . . . . 89 5Pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 6Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 7Structures, Unions, Enumerations, and User- Defined Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 8 C-Style Console I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 9 File I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 10 The Preprocessor and Comments . . . . . . . . . . . . . . . . . . . 237 Part II C++ 11 An Overview of C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 12 Classes and Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 13 Arrays, Pointers, References and the Dynamic Allocation Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . 327 14 Function Overloading, Copy Constructors, and Default Arguments . . . . . . . . . . . . . . . . . . . . . . . . 361 15 Operator Overloading . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 v
  • 7. vi C++: The Complete Reference 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 Namespaces, Conversion Functions,and Other Advanced Topics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593 24 Introducing the Standard Template Library . . . . . . . . . . 625 Part III The Standard Function Library 25 The 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 The Standard C++ Class Library 32 The 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 Applying C++ 39 Integrating New Classes: A Custom String Class . . . . . . 931 40 An Object-Oriented Expression Parser . . . . . . . . . . . . . . . 959 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 995
  • 8. 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
  • 9. viii C++: The Complete Reference 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 (−>) Operators . . . . . . . . . . . . . . . . . 51 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 3 Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 True and False in C and C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
  • 10. Contents ix 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
  • 11. x C++: The Complete Reference 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 Structures, Unions, Enumerations, and User- Defined Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 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
  • 12. Contents xi 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
  • 13. xii C++: The Complete Reference 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
  • 14. Contents xiii 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
  • 15. xiv C++: The Complete Reference 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 Arrays, Pointers, References, and the Dynamic Allocation Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327 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 Function Overloading, Copy Constructors, and Default Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361 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
  • 16. Contents xv 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
  • 17. xvi C++: The Complete Reference 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
  • 18. Contents xvii 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
  • 19. xviii C++: The Complete Reference 23 Namespaces, Conversion Functions, and Other Advanced Topics . . . . . . . . . . . . . . . . . . . . . 593 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
  • 20. Contents xix 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
  • 21. xx C++: The Complete Reference 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
  • 22. Contents xxi 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
  • 23. xxii C++: The Complete Reference localtime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 748 mktime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 748 setlocale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 748 strftime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 749 time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 750 29 The Dynamic Allocation Functions . . . . . . . . . . . . . . . . . 753 calloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754 free . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754 malloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 755 realloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 755 30 Utility Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 757 abort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 758 abs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 758 assert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 759 atexit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 759 atof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 759 atoi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 760 atol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 760 bsearch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 760 div . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 761 exit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 762 getenv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 762 labs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 762 ldiv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763 longjmp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763 mblen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763 mbstowcs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764 mbtowc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764 qsort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764 raise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765 rand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 766 setjmp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 766 signal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 766 srand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767 strtod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767 strtol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 768 strtoul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 768 system . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 769 va_arg, va_start, and va_end . . . . . . . . . . . . . . . . . . . . . . . . . 769 wcstombs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 770 wctomb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 770
  • 24. Contents xxiii 31 The Wide-Character Functions . . . . . . . . . . . . . . . . . . . . . 771 The Wide-Character Classification Functions . . . . . . . . . . . . . . . . . . 772 The Wide-Character I/O Functions . . . . . . . . . . . . . . . . . . . . . . . . . . 775 The Wide-Character String Functions . . . . . . . . . . . . . . . . . . . . . . . . 775 Wide-Character String Conversion Functions . . . . . . . . . . . . . . . . . . 775 Wide-Character Array Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 778 Multibyte/Wide-Character Conversion Functions . . . . . . . . . . . . . 779 Part IV The Standard C++ Class Library 32 The Standard C++ I/O Classes . . . . . . . . . . . . . . . . . . . . 783 The I/O Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 784 The I/O Headers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 786 The Format Flags and I/O Manipulators . . . . . . . . . . . . . . . . . . . . . . 787 Several Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 789 The streamsize and streamoff Types . . . . . . . . . . . . . . . . . . 789 The streampos and wstreampos Types . . . . . . . . . . . . . . . . 789 The pos_type and off_type Types . . . . . . . . . . . . . . . . . . . . . 789 The openmode Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 789 The iostate Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 790 The seekdir type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 790 The failure Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 790 Overload << and >> Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 790 The General-Purpose I/O Functions . . . . . . . . . . . . . . . . . . . . . . . . . 791 bad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 791 clear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 791 eof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 791 exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 792 fail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 792 fill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 792 flags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793 flush . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793 fstream, ifstream, and ofstream . . . . . . . . . . . . . . . . . . . . . . . 793 gcount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 794 get . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 794 getline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 795 good . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 796 ignore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 796 open . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 796 peek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 797 precision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 798
  • 25. xxiv C++: The Complete Reference put . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 798 putback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 798 rdstate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 798 read . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 799 readsome . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 799 seekg and seekp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 800 setf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 801 setstate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 801 str . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 802 stringstream, istringstream, ostringstream . . . . . . . . . . . . . 802 sync_with_stdio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 803 tellg and tellp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 804 unsetf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 804 width . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 804 write . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 805 33 The STL Container Classes . . . . . . . . . . . . . . . . . . . . . . . . 807 The Container Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 808 bitset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 810 deque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 812 list . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 815 map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 818 multimap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 820 multiset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823 queue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 825 priority_queue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 826 set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 827 stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 829 vector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 830 34 The STL Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 835 adjacent_find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 836 binary_search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 836 copy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 837 copy_backward . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 837 count . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 837 count_if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 838 equal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 838 equal_range . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 838 fill and fill_n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 839 find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 839 find_end . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 839 find_first_of . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 839