Đây là quyển sách tiếng anh về lĩnh vực công nghệ thông tin cho sinh viên và những ai có đam mê. Quyển sách này trình về lý thuyết ,phương pháp lập trình cho ngôn ngữ C và C++.
INPUT/OUTPUT <streambuf> Defines class template basic_streambuf, which is essential to the operation of the iostream classes—stream buffers. <strstream> Defines several classes that support iostreams operations on sequences stored in an array of char objects. ITERATOR <iterator> Defines a number of classes, class templates, and function templates used for the declaration and manipulation of iterators—iterators and iterator support. LANGUAGE SUPPORT <cfloat> Includes the Standard C header <float.h> within the std namespace, providing C-style floating-point limit macros. <ciso646> Includes the Standard C header <iso646.h> within the std namespace. <climits> Includes the Standard C header <limits.h> within the std namespace, providing C-style numeric scalar-limit macros. <csetjmp> Includes the Standard C header <setjmp.h> within the std namespace, providing C-style stack unwinding. <csignal> Includes the Standard C header <signal.h> within the std namespace, providing C-style signal handling. <cstdarg> Includes the Standard C header <stdarg.h> within the std namespace, providing variable-length function argument lists. <cstddef> Includes the Standard C header <stddef.h> within the std namespace, providing C library language support. <exception> Defines several types and functions related to exception handling. <limits> Defines the class template numeric_limits, whose specializations describe arithmetic properties of scalar data types. LOCALIZATION <clocale> Includes the Standard C header <locale.h> within the std namespace, representing cultural differences C-style. <locale> Defines many class templates and function templates that encapsulate and manipulate locales, which repre sent cultural differences. NUMERICS <cmath> Includes the Standard C header <math.h> within the std namespace, providing standard math functions. <complex> Provides a class template describing an object that stores both the real part and the imaginary part of a complex number. <cstdlib> Includes the Standard C header <stdlib.h> within the std namespace, providing pseudo-random numbers. <numeric> Defines several function templates useful for computing numeric values—generalized numeric operations. <valarray> Defines the class template valarray along with many supporting template classes and functions, providing numeric vectors and operations. STRINGS <cctype> Includes the Standard C header <ctype.h> within the std namespace—character classsification. <cstdlib> Includes the Standard C header <stdlib.h> within the std namespace, providing C-style string and character functions. <cstring> Includes the Standard C header <string.h> within the std namespace, providing C-style string and character functions. <cwchar> Includes the Standard C header <wchar.h> within the std namespace, providing C-style wide character support. <cwctype> Includes the Standard C header <wctype.h> within the std namespace, providing C-style wide character string functions. <string> Defines the container template class basic_string and various supporting templates—a string of T. How-To C++ T HE W AITE G ROUP’ S Jan Walter Danny Kalev Michael J. Tobler Paul Snaith Andrei Kossoroukov Scott Roberts A Division of Macmillan Computer Publishing 201 West 103rd St., Indianapolis, Indiana, 46290 USA The Waite Group’s C++ How-To Copyright 1999 by Sams Publishing All rights reserved. No part of this book shall be reproduced, stored in a retrieval system, or transmitted by any means, elec- tronic, mechanical, photocopying, recording, or otherwise, without written permission from the publisher. No patent liability is assumed with respect to the use of the information contained herein. Although every precaution has been taken in the prepara- tion of this book, the publisher and author assume no responsi- bility for errors or omissions. Neither is any liability assumed for damages resulting from the use of the information contained herein. International Standard Book Number: 1-57169-159-6 Library of Congress Catalog Card Number: 98-86976 Printed in the United States of America First Printing: January, 1999 02 01 00 99 4 3 2 1 Trademarks All terms mentioned in this book that are known to be trade- marks or service marks have been appropriately capitalized. Sams Publishing cannot attest to the accuracy of this information. Use of a term in this book should not be regarded as affecting the validity of any trademark or service mark. Warning and Disclaimer Every effort has been made to make this book as complete and as accurate as possible, but no warranty or fitness is implied. The information provided is on an “as is” basis. The authors and the publisher shall have neither liability or responsibility to any person or entity with respect to any loss or damages arising from the information contained in this book or from the use of the CD or programs accompanying it. EXECUTIVE EDITOR Tracy Dunkelberger ACQUISITIONS EDITOR Michelle Newcomb DEVELOPMENT EDITOR Bryan Morgan MANAGING EDITOR Jodi Jensen PROJECT EDITOR Dana Rhodes Lesh COPY EDITOR Mike Henry INDEXER Johnna VanHoose PROOFREADER Eddie Lushbaugh TECHNICAL EDITORS Darralyn McCall Jeramie Hicks Vincent Mayfield SOFTWARE DEVELOPMENT SPECIALIST Dan Scherf TEAM COORDINATOR Michelle Newcomb INTERIOR DESIGNER Gary Adair COVER DESIGNER Karen Ruggles LAYOUT TECHNICIANS Brandon Allen Timothy Osborn Staci Somers Mark Walchle CONTENTS AT A GLANCE INTRODUCTION 1 Part I Language Topics CHAPTER 1: A QUICK INTRODUCTION TO THE LANGUAGE . .7 CHAPTER 2: OBJECT ORIENTATION—THEORY AND PRACTICE . . . . . . . . . . . . . . . . . . . . . . . . . . . .51 CHAPTER 3: OBJECT ORIENTATION—C++ SPECIFICS . . . . . . .69 Part II Data Structures CHAPTER 4: STRUCTURES VERSUS CLASSES . . . . . . . . . . .105 CHAPTER 5: COMMON MISTAKES MADE WITH CLASSES . .157 CHAPTER 6: TEMPLATE CLASSES . . . . . . . . . . . . . . . . . . . .217 CHAPTER 7: THE STANDARD TEMPLATE LIBRARY’S CONTAINER CLASSES . . . . . . . . . . . . . . . . . . .245 Part III Algorithms CHAPTER 8: THE STANDARD C LIBRARY’S INCLUDED ALGORITHMS . . . . . . . . . . . . . . . . . . . . . . . .285 CHAPTER 9: THE STANDARD TEMPLATE LIBRARY’S INCLUDED ALGORITHMS . . . . . . . . . . . . . . . .313 Part IV Error Handling CHAPTER 10: C-STYLE ERROR HANDLING . . . . . . . . . . . . . .371 CHAPTER 11: EXCEPTION HANDLING IN C++ . . . . . . . . . . . .407 Part V M emory M anagement CHAPTER 12: NEW AND DELETE VERSUS MALLOC() AND FREE() . . . . . . . . . . . . . . . . . . . . . . . . .441 CHAPTER 13: MEMORY MANAGEMENT TECHNIQUES USING CLASSES . . . . . . . . . . . . . . . . . . . . . . . . . . . .471 Part VI I/O CHAPTER 14: UNDERSTANDING THE I/O STREAMS LIBRARY . . . . . . . . . . . . . . . . . . . . . . . . . . . .497 CHAPTER 15: FILE I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . .523 Part VII Appendixes APPENDIX A: NAMESPACES . . . . . . . . . . . . . . . . . . . . . . .549 APPENDIX B: RUNTIME TYPE INFORMATION . . . . . . . . . .559 INDEX 569 TABLE OF CONTENTS INTRODUCTION 1 PART I Language Topics CHAPTER 1 A QUICK INTRODUCTION TO THE LANGUAGE . . . . . . . . . . . . . . . . . .9 1.1 Write the simplest C++ program without knowing the language . . . . . . . . . . . .12 1.2 Create a program to perform calculations . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17 1.3 Use the various loop statements that are available in C++ . . . . . . . . . . . . . . . . .21 1.4 Create a program that uses one or more functions . . . . . . . . . . . . . . . . . . . . . .25 1.5 Use the derived data types such as arrays and pointers . . . . . . . . . . . . . . . . . . .29 1.6 Create data when the program is running . . . . . . . . . . . . . . . . . . . . . . . . . . . .37 1.7 Create a program to perform error handling, specifically exception handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .41 CHAPTER 2 OBJECT ORIENTATION—THEORY AND PRACTICE . . . . . . . . . . . . . . .53 2.1 Understand the object-oriented paradigm . . . . . . . . . . . . . . . . . . . . . . . . . . . .55 2.2 Learn the concept of inheritance so that I can apply it programmatically . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57 2.3 Learn the concept of encapsulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .62 2.4 Learn the concept of polymorphism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .64 CHAPTER 3 OBJECT ORIENTATION—C++ SPECIFICS . . . . . . . . . . . . . . . . . . . . . . .71 3.1 Create a simple class in C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .72 3.2 Implement the use of inheritance in C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80 3.3 Apply the use of encapsulation in a C++ program . . . . . . . . . . . . . . . . . . . . . .87 3.4 Implement polymorphism in C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .91 3.5 Implement static members of a class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .97 PART II Data Structures CHAPTER 4 STRUCTURES VERSUS CLASSES . . . . . . . . . . . . . . . . . . . . . . . . . . .107 4.1 Create my own data type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .110 4.2 Hide my data from external programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .118 4.3 Use encapsulation? What steps are required to encapsulate data? . . . . . . . . . .129 4.4 Create my own operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .134 4.5 Overload relational and equality operators . . . . . . . . . . . . . . . . . . . . . . . . . . .139 4.6 Provide access to encapsulated data to certain classes . . . . . . . . . . . . . . . . . . .144 4.7 Maintain global data in my program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .148 4.8 Know when I should use structures and when I should use classes . . . . . . . . .151 CHAPTER 5 COMMON MISTAKES MADE WITH CLASSES . . . . . . . . . . . . . . . . . .159 5.1 Know when to take an object-oriented approach or a procedural approach . . .162 5.2 Use and access a class’s data members . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .169 5.3 Use the scope resolution operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .175 5.4 Use dot notation to access the member functions of an object . . . . . . . . . . . . .181 5.5 Know which constructor to use when there are several to choose from . . . . . .186 5.6 Implement function overloading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .191 5.7 Correctly make use of inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .194 5.8 Pass parameters back through the C++ inheritance mechanism to parent classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .200 5.9 Distinguish between virtual classes and nonvirtual classes? How do I know when to use virtual classes and what does the word virtual mean in C++? . . . .206 CHAPTER 6 TEMPLATE CLASSES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .219 6.1 Create a template class to represent any simple data type and understand how to use the template in a working C++ program . . . . . . . . . . . . . . . . . . . .221 6.2 Create a template class to represent any simple data type and extend it to read in data to a variable of any data type . . . . . . . . . . . . . . . . . . . . . . . . .225 6.3 Create a template class to represent a compound data type and understand how to use the template in a working C++ program . . . . . . . . . . . . . . . . . . . .228 6.4 Write a template class that has two undefined data types that can be resolved at a later time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .233 6.5 Use a template class to handle a structure . . . . . . . . . . . . . . . . . . . . . . . . . . .238 CHAPTER 7 THE STANDARD TEMPLATE LIBRARY’S CONTAINER CLASSES . . . . . .247 7.1 Create a container object that automatically grows or shrinks as needed . . . . .250 7.2 Read a single element of a container . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .254 7.3 Modify a single element of a container . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .257 7.4 Use a generic LIFO data model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .261 7.5 Prevent automatic reallocation of a container . . . . . . . . . . . . . . . . . . . . . . . . .268 7.6 Traverse through a container’s elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . .273 7.7 Implement a queue data model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .278 THE WAITE GROUP’ S C++ HOW-TO viii PART III Algorithms CHAPTER 8 THE STANDARD C LIBRARY’S INCLUDED ALGORITHMS . . . . . . . . . .287 8.1 Sort an array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .289 8.2 Find an element in an array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .298 8.3 Locate an element in a nonsorted array . . . . . . . . . . . . . . . . . . . . . . . . . . . . .302 8.4 Choose between _lfind and _lsearch . . . . . . . . . . . . . . . . . . . . . . . . . . . . .305 8.5 Generate a sequence of random numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . .309 CHAPTER 9 THE STANDARD TEMPLATE LIBRARY’S INCLUDED ALGORITHMS . . .315 9.1 Create classes for sequential containers . . . . . . . . . . . . . . . . . . . . . . . . . . . . .320 9.2 Use predicates with sequence operations . . . . . . . . . . . . . . . . . . . . . . . . . . . .328 9.3 Repeat an action with all elements in a container range . . . . . . . . . . . . . . . . .333 9.4 Compare two sequences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .337 9.5 Search for a sequence of values in a container . . . . . . . . . . . . . . . . . . . . . . . .341 9.6 Accumulate all container elements and create a sequence of accumulated sums . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .345 9.7 Sort elements in a container using different sorting indexes . . . . . . . . . . . . . .351 9.8 Change the order of the container elements . . . . . . . . . . . . . . . . . . . . . . . . . .362 PART IV Error Handling CHAPTER 10 C-STYLE ERROR HANDLING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .373 10.1 Handle runtime errors in my programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . .376 10.2 Use the standard C library functions perror and strerror and the predefined C macros to report runtime errors in my programs . . . . . . . . . . . .381 10.3 Use assert to catch errors in my code when running in debug mode . . . . . . .385 10.4 Use raise and signal to indicate errors in my programs . . . . . . . . . . . . . . . .387 10.5 Use abort to terminate my application if a serious error occurs . . . . . . . . . . .391 10.6 Use exit and atexit together to perform some action when my program terminates normally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .393 10.7 Detect errors that occur when reading from or writing to a file using the file functions provided with the Standard C Library . . . . . . . . . . . . . . . . . . . .395 10.8 Use setjmp and longjmp to maintain state when handling errors . . . . . . . . . .397 10.9 Use a C++ class to handle runtime errors in a more maintainable fashion . . . .400 CONTENTS ix CHAPTER 11 EXCEPTION HANDLING IN C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . .409 11.1 Utilize the exception handling mechanism to process potential error conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .411 11.2 Use the various catch constructs such as multiple catch clauses, catch ordering, and the rethrowing of exceptions . . . . . . . . . . . . . . . . . . . . .419 11.3 Implement and use an exception class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .425 11.4 Specify exceptions that a function will throw . . . . . . . . . . . . . . . . . . . . . . . . .430 11.5 Handle exceptions that are not caught or not expected . . . . . . . . . . . . . . . . . .434 PART V M emory M anagement CHAPTER 12 NEW AND DELETE VERSUS MALLOC() AND FREE() . . . . . . . . . . . . . .443 12.1 Use new and delete with the C malloc() and free() routines . . . . . . . . . . .445 12.2 Use other C mem routines on objects allocated with new . . . . . . . . . . . . . .446 12.3 Find out how much memory my structures and classes really take . . . . . . . . .447 12.4 Prevent memory leaks caused by not using delete[] to delete arrays . . . . . . .450 12.5 Override the new or delete operators for my classes . . . . . . . . . . . . . . . . . . .451 12.6 Overload the new and delete functions for arrays . . . . . . . . . . . . . . . . . . . . .455 CHAPTER 13 MEMORY MANAGEMENT TECHNIQUES USING CLASSES . . . . . . . . .473 13.1 Make a simple class to clean up dynamically allocated memory automatically . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .475 13.2 Make a class that automatically cleans up objects allocated with new . . . . . . .479 13.3 Make an object that deallocates itself when there is no more code referencing it . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .483 PART VI I/O CHAPTER 14 UNDERSTANDING THE I/O STREAMS LIBRARY . . . . . . . . . . . . . . . .499 14.1 Use the C Standard I/O Library with the C++ I/O streams library . . . . . . . . . .500 14.2 Make my own classes compatible with cin and cout . . . . . . . . . . . . . . . . . . .503 14.3 Perform complex formatting with cout or another ostream object . . . . . . . . .504 14.4 Make my own stream manipulators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .515 THE WAITE GROUP’ S C++ HOW-TO x CHAPTER 15 FILE I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .525 15.1 Open a file stream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .526 15.2 Continually read data until the end of file . . . . . . . . . . . . . . . . . . . . . . . . . . .529 15.3 Handle stream errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .532 15.4 Read and write binary files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .536 15.5 Read from or write to different positions in a file . . . . . . . . . . . . . . . . . . . . . .542 PART VII Appendixes APPENDIX A NAMESPACES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .549 The Rationale Behind Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .550 A Brief Historical Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .550 Large-Scale Projects Are Susceptible to Name Clashes . . . . . . . . . . . . . . . . . . . . . . . .550 Properties of Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .551 A Fully Qualified Name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .551 A using-Declaration and a using-Directive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .551 Namespaces Are Open . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .552 Namespace Aliases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .553 Koenig Lookup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .554 Namespaces Do Not Incur Additional Overhead . . . . . . . . . . . . . . . . . . . . . . . . . . . .554 The Interaction of Namespaces with Other Language Features . . . . . . . . . . . . . . . . . .554 :: Operator Should Not Be Used to Designate a Global Function . . . . . . . . . . . . . . .555 Turning an External Function into a File-Local Function . . . . . . . . . . . . . . . . . . . . . .555 Standard Headers Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .556 Restrictions on Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .557 Namespace std May Not Be Modified . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .557 User-Defined new and delete Cannot Be Declared in a Namespace . . . . . . . . . . . . . .557 Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .558 APPENDIX B RUNTIME TYPE INFORMATION . . . . . . . . . . . . . . . . . . . . . . . . . . . .559 Static Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .559 Dynamic Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .560 Historical Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .563 RTTI Constituents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .563 Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .568 INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .569 [...]... he Sim plest C++ Program Wit hout Know ing t he Language The quickest way to learn to program in an unfamiliar language is to write a simple program and then analyze it In this How- To, you will write a very simple program This program is really a template for a C++ program The program in this How- To demonstrates the minimum a C++ program must consist of Y are not required to know C or C++ to create this... types to work with This How- To should dispel that myth A program is presented in this How- To to demonstrate the more common uses of these derived types Y ou will create a function to perform a calculation and one to display a message and gather input from the user The C++ struct is also introduced 1.6 Creat e Dat a When t he Program Is Running The creation of data at runtime is introduced in this How- To. .. would like to be able to write a C++ program without initially knowing anything about the language Is there a program I can write without having to know what is required? Technique Most programmers investigate a new language by writing a simple program and then go back to understand how it all works Y can do this in C++, too At a ou minimum, you will need • A C++ compiler and linker • A text editor Y will... compiler and linker • A text editor Y will use the editor to write the source text, referred to as source code ou Then you will use the compiler and linker to produce the program Steps 1 Y should create a base source code directory named SOURCE and then ou change to this directory Next, create a work directory named FIRST and change to it 2 Start your text editor In a pinch, you could use Notepad if you are... in a variable In order to use a variable, you must decide the data type(s) that you need The C++ language defines a number of variable data types to choose from The program presented in this How- To will calculate the number of inches for a specified number of feet Steps 1 Change to your base source directory and create a new directory named TOINCH Then, start up your text editor 2 T in the following... I N C + + 1.3 How do I… C O M PL EX I T Y BEG I N N I N G Use t he various loop st at em ent s t hat are available in C++? Problem I have started to sink my teeth into C++ now by writing very simple programs I need to extend my knowledge of the language and have considered using a loop statement as I’ve seen in other languages I need to know the various loops available in C++ and how to use them Technique... approach that can be added to your arsenal T H E W A I T E G RO U P’ S C+ + H O W - T O The Waite Group’s C++ How- T is divided into 15 chapters, each of which o covers a specific feature of the C++ programming language: • Chapter 1, “A Quick Introduction to the Language”—Before diving into the “deep end” of C++ programming, this chapter provides a gentle introduction into the basic concepts of the... How It Works Starting with the sixth line of code, an int has been declared and initialized with a value of 0 This integer variable will be used by all three loops In addition to demonstrating loops, this How- To introduces you to the C++ increment (++) and less-than ( . templates—a string of T. How-To C++ T HE W AITE G ROUP’ S Jan Walter Danny Kalev Michael J. Tobler Paul Snaith Andrei Kossoroukov Scott Roberts A Division. contained herein. International Standard Book Number: 1-5 716 9-1 5 9-6 Library of Congress Catalog Card Number: 9 8-8 6976 Printed in the United States of America First