Welcome to ANSI/ISO Standard C++! At Deitel &
Associates, we write college-level programming-language textbooks and
professional books and work hard to keep our published books up-to-date
with a steady flow of new editions. Writing C++ How to Program,
Fourth Edition, (4/e for short), was a joy. This book and
its support materials have everything instructors and students need for
an informative, interesting, challenging and entertaining C++
educational experience. As the book goes to publication, it is
compliant with the latest version of the ANSI/ISO C++ Standard (one of
the most important worldwide standards for the computing community) and
with object-oriented design using the latest version of the UML
(Unified Modeling Language) from the Object Management Group (OMG). We
tuned the writing, the pedagogy, our coding style, the book’s ancillary
package and even added a substantial treatment of developing Internet-
and Web-based applications. We have added a comprehensive Tour of the
Book section to Chapter 1. This will help instructors, students and
professionals get a sense of the rich coverage the book provides of C++
object-oriented programming, object-oriented design with the UML and
generic programming. If you are evaluating the book, please read the
Tour of the Book now in pages 44–56.
Whether you are an instructor, a student, an experienced
professional or a novice programmer, this book has much to offer. C++
is a world-class programming language for developing
industrial-strength, high-performance computer applications. We
carefully audited the manuscript against the ANSI/ISO C++ standard
document, which defines C++, and we were privileged to have as a
reviewer Steve Clamage of Sun Microsystems who heads the ANSI J16
Committee responsible for evolving the C++ standard. As a result, the
programs you create by studying this text should port easily to any
ANSI/ISO-compliant compiler.
In this Preface, we overview C++ How to Program, 4/e’s
comprehensive suite of educational materials that help instructors
maximize their students’ C++ learning experience. We explain
conventions we use, such as syntax coloring the code examples, "code
washing" and highlighting important code segments to help focus
students’ attention on the key concepts introduced in each chapter. We
overview the new features of C++ How to Program, 4/e, including
our early treatment of arrays and strings as objects, an enhanced
treatment of object-oriented programming, Web-application development
with CGI, the enhanced elevator-simulation object-oriented design (OOD)
case study with the UML, and the extensive use of UML diagrams that
have been upgraded to UML version 1.4 standards.
Prentice Hall has bundled Microsoft’s Visual C++®
6 Introductory Edition software with the text and offers a separate
value-pack containing C++ How to Program, 4/e, with Metrowerks
CodeWarrior for the Macintosh and Windows. We list several
compilers that are available on the Web free for download. To further
support novice programmers, we offer six of our new Dive-into™ Series
publications that are available free for download at www.deitel.com. These
materials explain how to compile, execute and debug C++ programs using
various popular C++ development environments.
We overview the complete package of ancillary materials
available to instructors and students using C++ How to Program, 4/e.
These include an Instructor’s Resource CD with solutions to the
book’s chapter exercises and a Test-Item File with hundreds of
multiple-choice questions and answers. Additional instructor resources
are available at the book’s Companion Web Site (www.prenhall.com/deitel),
which includes a Syllabus Manager and customizable PowerPoint®
Lecture Notes. Numerous support materials are available for students at
the Companion Web Site, as well. For instructors who want to hold
closed-lab sessions (or highly structured homework assignments), we
provide the optional, for-sale manual, C++ in the Lab. This
publication includes carefully constructed Prelab Activities, Lab
Exercises and Postlab Activities.
This Preface also discusses The C++ Multimedia Cyber
Classroom, 4/e, an interactive, multimedia CD-based version of the
book. This learning aid provides audio "walkthroughs" of programs,
animations of programs executing and hundreds of exercises and
solutions. We describe how to order both the Cyber Classroom and The
Complete C++ Training Course, 4/e, boxed product, which contains
the Cyber Classroom and the textbook.
We discuss several Deitel™ e-learning initiatives,
including an explanation of Deitel content available for the Blackboard,
CourseCompass and WebCT Course Management
Systems, each of which supports C++ How to Program, 4/e. Premium
CourseCompass, which offers enhanced Deitel content based on The
C++ Multimedia Cyber Classroom, 4/e, will be available in January
2003.
C++ How to Program, 4/e, was reviewed by 52
distinguished academics and industry professionals; we list their names
and affiliations so you can get a sense of how carefully this book was
scrutinized. The Preface concludes with information about the authors
and about Deitel & Associates, Inc. As you read this book, if you
have any questions, please send an e-mail to deitel@deitel.com; we will
respond promptly. Please visit our Web site, www.deitel.com, regularly and
be sure to sign up for the Deitel™ Buzz Online e-mail
newsletter at www.deitel.com/newsletter/subscribe.html.
We use the Web site and the newsletter to keep our readers current on
all Deitel™ publications and services.
Features of C++ How to Program, Fourth Edition
This book contains many features including:
Full-Color Presentation
This book is in full color to show programs and their
outputs as they typically would appear on a computer screen. We syntax
color all the C++ code, as do many C++ integrated-development
environments and code editors. This greatly improves code
readability—an especially important goal, given that this book contains
over 20,000 lines of code. Our syntax-coloring conventions are as
follows:
comments
appear in green
keywords
appear in dark blue
errors
appear in red
constants
and literal values appear in light blue
all other code appears in black
Code Highlighting and User-Input Highlighting
We have added extensive code
highlighting. In our code walkthroughs (at Deitel, we call these
"writearounds"), we have eliminated most of the "redundant" code
snippets that appeared inline in the text in the Third Edition. We kept
them in the earliest portion of the book as a pedagogic device to help
novices. We want the reader to see all new code features in context, so
from Chapter 3 forward, our code walkthroughs simply refer to the line
numbers of the new code segments inside complete source programs. To
make it easier for readers to spot the featured segments, we have
highlighted them in bright yellow. This feature also helps students
review the material rapidly when preparing for exams or labs. We have
also highlighted in our screen dialogs all user inputs to distinguish
them from program outputs.
"Code Washing"
Code washing is our term for applying
comments, using meaningful identifiers, applying indentation and using
vertical spacing to separate meaningful program units. This process
results in programs that are much more readable and self-documenting.
We have done extensive "code washing" of all the source code programs
in the text, the lab manual, the ancillaries and the Cyber Classroom.
Early Introduction of Standard
Library string and vector Objects
Object-oriented programming languages
generally offer the ability to create string and array objects by
instantiating them from library classes or from programmer-defined
classes. It is also important for students learning C++ to become
familiar with C-style, pointer-based arrays and strings, because of the
massive amount of C and early C++ legacy code they will encounter in
industry. In C++ How to Program, 4/e, we show all three means of
creating strings and arrays. In Chapters 4 and 5 we show the
traditional, C-like pointer-based arrays and strings, respectively. In
Chapter 8, Operator Overloading, we create our own user-defined classes
Array and String.
At the end of Chapter 8, we introduce library classes vector
and string, which we explain in detail in
Chapter 15 and Chapter 21, respectively. Through Chapter 8, we favor
pointer-based arrays and strings; after Chapter 8, we favor the library
classes. The Chapter 15 material on string
could be taught at any point after Chapter 8. The Chapter 21 material
on vector (and other aspects of the STL)
could also reasonably be taught after Chapter 8, although we recommend
covering Chapter 11, Templates, first.
Tuned Treatment of Object-Oriented
Programming in Chapters 9 and 10
This is one of the most significant
improvements in this new edition. We performed a high-precision upgrade
to Chapters 9 and 10. The improvements make the material clearer and
more accessible to students and professionals, especially those
studying object-orientation for the first time.
Redesigned Pedagogy of Chapter
9, Object-Oriented Programming: Inheritance.
The new Chapter 9 carefully walks the
reader through a five-example sequence that demonstrates private data, protected
data and software reuse via inheritance. We begin by demonstrating a
class with private data members and public member functions to manipulate that data.
Next, we implement a second class with several additional capabilities.
To do this, we duplicate much of the first example’s code. In our third
example, we begin our discussion of inheritance and software reuse—we
use the class from the first example as a base class and inherit its
data and functionality into a new derived class. This example
introduces the inheritance mechanism and demonstrates that a derived
class cannot access its base class’s private
data directly. This motivates our fourth example, in which we introduce
protected data in the base class
and demonstrate that the derived class can indeed access its base
class’s protected data. The last example in
the sequence demonstrates proper software engineering by defining the
base class’s data as private and using the
base class’s public member functions (that
were inherited by the derived class) to manipulate the base class’s private data from the derived class. We follow the
five-part introduction with a three-level class hierarchy that employs
the software engineering techniques introduced earlier in the chapter.
The chapter closes with a discussion of the three inheritance types
supported by C++ and a general discussion of software engineering with
inheritance.
Redesigned Pedagogy of Chapter 10,
Object-Oriented Programming: Polymorphism.
The new Chapter 10 builds on the
inheritance concepts presented in Chapter 9 and focuses on the
relationships between classes in a class hierarchy. Chapter 10 uses a
four-example sequence to present the powerful processing capabilities
that these relationships enable. We begin with an example that
illustrates the "is-a" relationship between a derived-class object and
its base-class type. This relationship enables the derived-class object
to be treated as an object of its base class. We show that we are able
to aim a base-class pointer at a derived-class object and invoke the
base-class’s functions on that object. In our second example, we
demonstrate that the reverse is not true—a base-class object is not
considered to be an object of its derived-class type—and we show that
compiler errors occur if a program attempts to manipulate a base-class
object in this manner. Our third example demonstrates that the only
functions which can be invoked through a base-class pointer are those
functions defined by the base class. The example shows that attempts to
invoke derived-class-only functions result in error messages. The last
example in the sequence introduces polymorphism with virtual functions,
which enable a program to process objects of classes related by a class
hierarchy as objects of their base-class type. When a virtual function
is invoked via a base-class pointer (or reference), the
derived-class-specific version of that function is invoked. The chapter
continues with a case study on polymorphism in which we process an
array of objects that all have a common abstract base class that
contains the set of functions common to every class in the hierarchy.
We follow this example with an in-depth discussion of how polymorphism
works "under the hood." We conclude with a case study that demonstrates
how a program that processes objects polymorphically can still perform
type-specific processing by determining at execution time the type of
the object currently being processed.
Web Applications Development with CGI
The new Chapter 16, Web Programming with
CGI, has everything readers need to begin developing their own
Web-based applications that will run on the Internet! Readers will
learn how to build so-called n-tier applications, in which the
functionality provided by each tier can be distributed to separate
computers across the Internet or executed on the same computer. In
particular, we build a three-tier online bookstore application. The
bookstore's information is stored in the application’s data tier. In
industrial-strength applications, the data tier is typically a database
such as Oracle, Microsoft® SQL Server or MySQL. For
simplicity, we use text files and employ the file-processing techniques
of Chapter 14 to access these files. The user enters requests and
receives responses at the application’s client tier, which is typically
a computer running a Web browser such as Microsoft Internet Explorer or
Netscape®. Web browsers, of course, know how to communicate
with Web sites throughout the Internet. The middle tier contains both a
Web server and an application-specific C++ program (e.g., our bookstore
application). The Web server communicates with the C++ program (and
vice versa) via the CGI (Common Gateway Interface) protocol. We use the
popular Apache HTTP server as our Web server, which is available free
for download from www.apache.org.
The Web server knows how to communicate with the client tier across the
Internet using the HyperText Transfer Protocol (HTTP). We discuss the
crucial role of the Web server in Web programming and provide a simple
example that requests a Web page from a Web server. We discuss CGI and
how it allows a Web server to communicate with the top tier and CGI
scripts (i.e., our C++ programs). We provide a simple example that gets
the time and date from the server and renders it in a browser. In our
forms-based examples we use buttons, password fields, check boxes and
text fields. We present an example of an interactive portal for a
travel company that displays airfares to various cities. Travel-club
members can log in and view discounted airfares. We also discuss
various methods of storing client-specific data, which include hidden
fields (i.e., information stored in a Web page but not rendered by the
Web browser) and cookies—small text files that the browser stores on
the client’s machine. The chapter examples conclude with an e-business
case study of an online bookstore that allows users to add books to an
electronic shopping cart. This case study contains several CGI scripts
that interact with one another to form a complete application. The
online bookstore is password protected, so users first must log in to
gain access.
XHTML™
The World Wide Web Consortium (W3C) has
declared HyperText Markup Language (HTML) to be a legacy technology
that will undergo no further development. HTML is being replaced by the
Extensible HyperText Markup Language (XHTML)—an XML-based technology
that rapidly is becoming the standard for describing Web content. We
use XHTML in Chapter 16, Web Programming with CGI; Appendix E presents
an XHTML introduction. If you are not familiar with XHTML, please read
Appendix E before reading Chapter 16.
Unified Modeling Language™ (UML)
The Unified Modeling Language™ (UML) has
become the preferred graphical modeling language for designing
object-oriented systems. In C++ How to Program, Third Edition, we used
the UML in optional sections only, and we used conventional flowchart
segments and inheritance diagrams to reinforce the explanations. We
have fully converted the diagrams in the book to be UML 1.4 compliant.
In particular, we upgraded all the figures in the UML/OOD Elevator
Simulation case study; we converted all the flowcharts in Chapter 2,
Control Structures, to UML activity diagrams; and we converted all the
inheritance diagrams in Chapters 9, 12, 14 and 22 to UML class
diagrams.
This Fourth Edition carefully
tunes the optional (but highly recommended) case study we present on
object-oriented design using the UML. In the case study, we fully
implement an elevator simulation. In the "Thinking About Objects"
sections at the ends of Chapters 1–7 and 9, we present a carefully
paced introduction to object-oriented design using the UML. We present
a concise, simplified subset of the UML then guide the reader through a
first design experience intended for the novice object-oriented
designer/programmer. The case study is fully solved. It is not an
exercise; rather, it is an end-to-end learning experience that
concludes with a detailed walkthrough of the C++ code. In each of the
first five chapters, we concentrate on the "conventional" methodology
of structured programming, because the objects that we build will use
these structured-program pieces. We conclude each chapter with a
"Thinking About Objects" section, in which we present an introduction
to object orientation using the UML. These "Thinking About Objects"
sections help students develop an object-oriented way of thinking, so
that they immediately can use the object-oriented programming concepts
they begin learning in Chapter 6. In the first of these sections at the
end of Chapter 1, we introduce basic concepts (i.e., "object think")
and terminology (i.e., "object speak"). In the optional "Thinking About
Objects" sections at the ends of Chapters 2–5, we consider more
substantial issues, as we undertake a challenging problem with the
techniques of object-oriented design (OOD). We analyze a typical
problem statement that requires a system to be built, determine the
objects needed to implement that system, determine the attributes these
objects need to have, determine the behaviors these objects need to
exhibit and specify how the objects need to interact with one another
to meet the system requirements. We accomplish this even before we
discuss how to write object-oriented C++ programs. In the "Thinking
About Objects" sections at the ends of Chapters 6, 7 and 9, we build a
C++ implementation of the object-oriented system we designed in the
earlier chapters. This project enabled us to incorporate topics that we
do not discuss in any other section of the book, including object
interaction, an in-depth discussion of handles, the philosophy of using
references vs. pointers and the use of forward declarations to avoid
circular-include problems. This case study will help prepare students
for the kinds of substantial projects they will encounter in industry.
We employ a carefully developed, incremental object-oriented design
process to produce a UML-based design for our elevator simulator. From
this design, we produce a substantial working C++ implementation using
key programming notions, including classes, objects, encapsulation,
visibility, composition and inheritance.
More About the (Optional) Elevator
Simulation Case Study
This case study was introduced in C++
How to Program, 3/e, and was carefully tuned for the Fourth Edition.
We brought all the UML diagrams into compliance with version 1.4, we
reorganized many of the diagrams to make them clearer, we code washed
the complete C++ solution presented in the book, and we tuned the
discussions for clarity and precision. The case study was submitted to
a distinguished team of OOD/UML reviewers, including leaders in the
field from Rational (the creators of the UML) and the Object Management
Group (responsible for maintaining and evolving the UML).
In Chapter 2, we begin the first phase
of the object-oriented design (OOD) for our elevator
simulator—identifying the classes needed to implement the simulator. We
also introduce the UML use case, class and object diagrams and the
concepts of associations, multiplicity, composition, roles and links.
In Chapter 3, we determine many of the class attributes needed to
implement the elevator simulator. We also introduce the UML statechart
and activity diagrams and the concepts of events and actions as they
relate to these diagrams. In Chapter 4, we determine many of the
operations (behaviors) of the classes in the elevator simulation. We
also introduce the UML sequence diagram and the concept of messages
sent between objects. In Chapter 5, we determine the collaboration
(sets of interactions among objects in the system) needed to implement
the elevator system and represent these interactions using the UML
collaboration diagram. We also include a bibliography and a list of
Internet and Web resources that contain the UML 1.4 specifications and
other reference materials, general resources, tutorials, FAQs,
articles, whitepapers and software. In Chapter 6, we use the UML class
diagram developed in previous sections to outline the C++ header files
that define our classes. We also introduce the concept of handles to
objects in the system, and we begin to study how to implement handles
in C++. In Chapter 7, we present a complete elevator simulator C++
program (approximately 1200 lines of code) and a detailed code
walkthrough. The code follows directly from the UML-based design
created in previous sections and employs our best programming
practices. We also discuss dynamic-memory allocation, composition,
object interaction via handles, and how to use forward declarations to
avoid the circular-include problem. In Chapter 9, we update the
elevator simulation design and implementation to incorporate
inheritance and suggest further modifications.
Standard Template Library (STL)
This might be one of the most important
chapters in the book in terms of your appreciation of software reuse.
The STL defines powerful, template-based, reusable components that
implement many common data structures and algorithms used to process
those data structures. Chapter 21 introduces the STL and discusses its
three key components—containers, iterators and algorithms. STL
containers are data structures capable of storing objects of any data
type. We show that there are three container categories—first-class
containers, adapters and near containers. STL iterators, which are
similar to pointers (but much safer), are used by programs to
manipulate the STL-container elements. In fact, standard arrays can be
manipulated as STL containers, using standard pointers as iterators. We
show that manipulating containers with iterators is convenient and
provides tremendous expressive power when combined with STL
algorithms—in some cases, reducing many lines of code to a single
statement. STL algorithms are functions that perform common data
manipulations such as searching, sorting, comparing elements (or entire
data structures), etc. There are approximately 70 algorithms
implemented in the STL; these include common container operations such
as searching for an element, sorting elements, comparing elements,
removing elements, replacing elements and many more. Most of these
algorithms use iterators to access container elements. We show that
each first-class container supports specific iterator types, some of
which are more powerful than others. A container’s supported iterator
type determines whether the container can be used with a specific
algorithm. Iterators encapsulate the mechanism used to access container
elements. This encapsulation enables many of the STL algorithms to be
applied to a variety of containers without regard for the underlying
container implementation. As long as a container’s iterators support
the minimum requirements of the algorithm, the algorithm can process
that container’s elements. This also enables programmers to create
algorithms that can process the elements of multiple container types.
An advantage of the STL is that programmers can reuse the STL
containers, iterators and algorithms to implement common data
representations and manipulations. This reuse saves substantial
development time and resources.
Teaching Approach
Our book is intended to be used at the
introductory and intermediate levels. We have not attempted to cover
every feature of the C++ standard. C++ has replaced C as the industry’s
high-performance systems-implementation language of choice. However, C
programming continues to be an important and valuable skill, because of
the enormous amount of C legacy code that must be maintained in
industry. We point out pitfalls and explain procedures for dealing with
them effectively. Students are highly motivated by the fact that they
are learning a leading-edge language (C++) and a leading-edge
programming paradigm (object-oriented programming) that will be
immediately useful to them as they leave the college environment.
C++ How to Program, 4/e,
contains a rich collection of examples, exercises and projects drawn
from many fields and designed to provide students with a chance to
solve interesting, real-world problems. The code examples in the text
have been tested on multiple compilers—Microsoft Visual C++ 6,
Microsoft Visual C++ .NET, two versions of Borland C++Builder and two
versions of GNU C++. For the most part, the programs in the text will
work on all ANSI/ISO standard-compliant compilers; we posted the few
problems we found at www.deitel.com.
When possible, we also posted the exact fixes required to enable those
programs to work with a particular compiler.
The book concentrates on the principles
of good software engineering and stresses program clarity. We are
educators who teach edge-of-the-practice topics in industry classrooms
worldwide. This text emphasizes good pedagogy.
Live-Code™ Approach
C++ How to Program, 4/e, is
loaded with numerous Live-Code™ examples. Each new concept is presented
in the context of a complete, working example that is immediately
followed by one or more sample executions showing the program’s
input/output dialog. This style exemplifies the way we teach and write
about programming and is the focus of our multimedia Cyber
Classrooms and Web-based training courses. We call this method of
teaching and writing the Live-Code™ Approach. We
use programming languages to teach programming languages. Reading
the examples in the text is much like typing and running them on a
computer.
World Wide Web Access
All of the source-code examples for C++
How to Program, 4/e, (and our other publications) are available on the
Internet as downloads from the following Web sites:
www.deitel.com
www.prenhall.com/deitel
Registration is quick and easy and the
downloads are free. We suggest downloading all the examples, then
running each program as you read the corresponding text. Making changes
to the examples and immediately seeing the effects of those changes is
a great way to enhance your C++ learning experience.
Objectives
Each chapter begins with objectives that
inform students of what to expect and gives them an opportunity, after
reading the chapter, to determine whether they have met the intended
objectives. The objectives serve as confidence builders.
Quotations
The chapter objectives are followed by
sets of quotations. Some are humorous, some are philosophical and some
offer interesting insights. We have found that students enjoy relating
the quotations to the chapter material. Many of the quotations are
worth a second look after you read the chapters.
Outline
The chapter outline enables students to
approach the material in a top-down fashion. Along with the chapter
objectives, the outline helps students anticipate future topics and set
a comfortable and effective learning pace.
20,704 Lines of Syntax-Colored Code in
267 Example Programs (with Program Outputs)
We present C++ features in the context
of complete, working C++ programs. These Live-Code™ programs range in
size from just a few lines of code to substantial examples containing
several hundred lines of code. Each program is followed by a window
containing the outputs produced when the program is run. This enables
the student to confirm that the programs run as expected. Relating
outputs back to the program statements that produce those outputs is an
excellent way to learn and to reinforce concepts. Our programs exercise
the diverse features of C++. The code is syntax colored with C++
keywords, comments and other program text each appearing in different
colors. This facilitates reading the code— students especially will
appreciate the syntax coloring when they read the larger programs we
present. All of the examples are available on the book’s CD and are
free for download at www.deitel.com.
598 Illustrations/Figures
An abundance of charts, line drawings
and program outputs is included. We have converted all flowcharts to
UML activity diagrams. We also use UML class diagrams in Chapters 9,
10, 12, 14 and 22 to model the relationships between classes throughout
the text.
601 Programming Tips
We have included six types of
programming tip to help students focus on important aspects of program
development, testing and debugging, performance and portability. We
highlight hundreds of these tips as Good Programming Practices, Common
Programming Errors, Performance Tips, Portability Tips,
Software Engineering Observations and Testing
and Debugging Tips. These tips and practices represent the best we
could glean from almost six decades (combined) of programming and
teaching experience. One of our students—a mathematics major—told us
recently that she feels this approach is similar to the highlighting of
axioms, theorems and corollaries in mathematics books, because it
provides a sound basis on which to build good software.
90 Good Programming Practices
Good Programming Practices are
tips that call attention to techniques that help students produce
programs that are more readable, self-documenting and easier to
maintain. When we teach introductory courses to nonprogrammers, we
state that the "buzzword" of each course is "clarity," and we tell the
students that we will highlight (in these Good Programming Practices)
techniques for writing programs that are clearer, more understandable
and more maintainable.
198 Common Programming Errors
Students learning a language—especially
in their first programming course—tend to make certain kinds of errors
frequently. Focusing on these Common Programming Errors reduces the
likelihood that students will makes the same mistakes. It also shortens
long lines outside instructors’ offices during office hours!
88 Performance Tips
In our experience, teaching students to
write clear and understandable programs is by far the most important
goal for a first programming course. But students want to write the
programs that run the fastest, use the least memory, require the
smallest number of keystrokes or dazzle in other ways. Students really
care about performance and they want to know what they can do to
produce the most efficient programs. So we include Performance Tips
that highlight opportunities for improving program
performance—making programs run faster or minimizing the amount of
memory that they occupy.
36 Portability Tips
Software development is a complex and
expensive activity. Organizations that develop software must often
produce versions customized to a variety of computers and operating
systems. So there is a strong emphasis today on portability, i.e., on
producing software that will run on a variety of computer systems with
few, if any, changes. Some programmers assume that if they implement an
application in standard C++, the application will be portable. This is
simply not the case. Achieving portability requires careful and
cautious design. There are many pitfalls. We include Portability
Tips to help students write portable code and to provide insights
on how C++ achieves its high degree of portability.
149 Software Engineering Observations
The object-oriented programming paradigm
necessitates a complete rethinking of the way we build software
systems. C++ is an effective language for achieving good software
engineering. The Software Engineering Observations highlight
architectural and design issues, that affect the construction of
software systems, especially large-scale systems. Much of what the
student learns here will be useful in upper-level courses and in
industry as the student begins to work with large, complex real-world
systems.
38 Testing and Debugging Tips
When we first designed this "tip type,"
we thought the tips would contain suggestions strictly for exposing
bugs and removing them from programs. In fact, many of the tips
describe aspects of C++ that prevent "bugs" from getting into programs
in the first place, thus simplifying the testing and debugging process.
Summary (875 Summary bullets)
Each chapter ends with additional
pedagogical devices. We present a thorough, bullet-list-style summary
of the chapter. This helps the student review and reinforce key
concepts. There is an average of 40 summary bullets per chapter.
Terminology (1782 Terms)
We include an alphabetized list of the
important terms defined in the chapter in a Terminology section. Again,
this serves as further reinforcement. There are, on average, 81 terms
per chapter. Each term also appears in the index, so the reader can
locate terms and definitions quickly.
555 Self-Review Exercises and Answers
(Count Includes Separate Parts)
Extensive Self-Review Exercises and Answers
to Self-Review Exercises are included for self study. This gives the
student a chance to build confidence with the material and prepare to
attempt the regular exercises.
800 Exercises (Solutions in
Instructor’s Manual; Count Includes Separate Parts)
Each chapter concludes with a
substantial set of exercises including simple recall of important
terminology and concepts; writing individual C++ statements; writing
small portions of C++ functions and classes; writing complete C++
functions, classes and programs; and writing major term projects. The
large number of exercises enables instructors to tailor their courses
to the unique needs of their audiences and to vary course assignments
each semester. Instructors can use these exercises to form homework
assignments, short quizzes and major examinations. The solutions for
the exercises are included on the Instructor’s CD which is available
only to instructors through their Prentice Hall representatives. [NOTE:
Please do not write to us requesting the Instructor’s CD. Distribution
of this ancillary is limited strictly to college professors teaching
from the book. Instructors may obtain the solutions manual only from
their Prentice Hall representatives.] Students and professional readers
can obtain solutions to approximately half the exercises in the book by
purchasing the optional C++ Multimedia Cyber Classroom, 4/e. The Cyber
Classroom offers many other valuable capabilities as well and is ideal
for self study and reference. Also available is the boxed product, The
Complete C++ Training Course, 4/e, which includes both our textbook,
C++ How to Program, 4/e, and the C++ Multimedia Cyber Classroom, 4/e.
All of our Complete Training Course products are available at
bookstores and online booksellers, including
www.informIT.com.
Approximately 5,000 Index Entries
(with approximately 7,700 Page References)
We have included an extensive Index at
the back of the book. Using this resource, readers can search for any
term or concept by keyword. The Index is useful to people reading the
book for the first time and is especially useful to professional
programmers who use the book as a reference. These index entries also
appear as hyperlinks in the C++ Multimedia Cyber Classroom, 4/e.
"Double Indexing" of All C++
Live-Code™ Examples
C++ How to Program, 4/e,
has 267 Live-Code™ examples, which we have "double indexed." For every
C++ source-code program in the book, we took the figure caption and
indexed it both alphabetically and as a subindex item under "Examples."
This makes it easier to find examples that are demonstrating particular
features. Each of the figure captions also appears in the Illustrations
section (following the Contents section) at the front of the book.
Software Included with C++ How to
Program, 4/e
C++ How to Program, 3/e, included on its
CD the Microsoft Visual C++ 6 Introductory Edition development
environment. In C++ How to Program, 4/e, we wanted to include
Microsoft’s new Visual C++ .NET development environment, but Microsoft
was not as yet making this software available to be included with
textbooks. As soon as Microsoft does make Visual C++ .NET available, we
will post information at our Web site indicating how students and
professionals can obtain this software; there will be separate
instructions for students and professionals. C++ How to Program, 4/e,
includes Microsoft Visual C++ 6 Introductory Edition. A separate
value-pack option also is available that contains Metrowerks
CodeWarrior (ISBN# 0-13-101151-0); for more information on this option
please write to cs@prenhall.com
or deitel@deitel.com.
Free C++ Compilers and Trial-Edition
C++ Compilers on the Web
This section overviews C++ compilers
that are available for download over the Web. We discuss only those
compilers that are available for free or as free-trial versions. Please
keep in mind that in many cases, the trial-edition software cannot be
used after the trial period has expired.
One popular organization that develops
free software is the GNU Project (www.gnu.org),
originally created to develop a free operating system similar to UNIX.
GNU offers developer resources, including editors, debuggers and
compilers. Many developers use the gcc (GNU Compiler Collection)
compilers, available for download from gcc.gnu.org. This product
contains compilers for C, C++, Java and other languages. The gcc
compiler is a command-line compiler (i.e., it does not provide a
graphical user interface). Many Linux and UNIX systems come with the
gcc compiler installed. Red Hat has developed Cygwin (www.cygwin.com), an emulator
that allows developers to use UNIX commands on Windows. Cygwin includes
the gcc compiler.
Intel provides 30-day trial versions for
its Windows and Linux C++ command-line compilers. The 30-day trial
period also includes free customer support. Information on both
compilers can be found at developer.intel.com/software/products/global/eval.htm.
Borland provides a Windows-based C++
developer product called C++Builder
(www.borland.com/cbuilder/cppcomp/index.html). The basic C++Builder
compiler (a command-line compiler) is free for download. Borland also
provides several versions of the C++Builder that contain graphical user
interfaces (GUIs). These GUIs are more formally called integrated
development environments (IDEs), and, unlike command-line compilers,
enable the developer to edit, debug and test programs quickly. Using an
IDE, many of the tasks that involved tedious commands can now be
executed via menus and buttons. Some of these products are available on
a free-trial basis. For more information on C++Builder, visit
www.borland.com/products/downloads/download_cbuilder.html
For Linux developers, Borland provides
the Borland Kylix development environment. The Borland Kylix Open
Edition, which includes an IDE, can be downloaded from
www.borland.com/products/downloads/download_kylix.html
Many of the downloads available from
Borland require users to register.
The Digital Mars C++ Compiler (www.digitalmars.com),
is available for Windows and DOS, and includes tutorials and
documentation. Readers can download a command-line or IDE version of
the compiler. The DJGPP C/C++ development system is available for
computers running DOS. DJGPP stands for DJ’s GNU Programming Platform,
where DJ is for DJ Delorie, the creator of DJGPP. Information on DJGPP
can be found at www.delorie.com/djgpp. Locations where the compiler can
be downloaded at are provided at www.delorie.com/djgpp/getting.html.
Dive-Into™ Series Tutorials for
Popular C++ Environments
We have launched our new Dive-Into™
Series of tutorials to help our readers get started with many popular
C++ program-development environments. These are available free for
download at www.deitel.com/books/downloads.html.
Currently, we have the following Dive-Into™
Series publications:
Dive-Into Microsoft®
Visual C++® 6
Dive-Into Microsoft®
Visual C++® .NET
Dive-Into Borland™ C++Builder™
Compiler (command-line version)
Dive-Into Borland™ C++Builder™
Personal (IDE version)
Dive-Into GNU C++ on Linux
Dive-Into GNU C++ via Cygwin on
Windows (Cygwin is a UNIX emulator for Windows that includes
the GNU C++ compiler.)
Each of these tutorials shows how to
compile, execute and debug C++ applications in that particular compiler
product. Many of these documents also provide step-by-step instructions
with screenshots to help readers to install the software. Each document
overviews the compiler and its online documentation.
Ancillary Package for C++ How to
Program, 4/e
C++ How to Program, 4/e, has
extensive ancillary materials for instructors. The Instructor’s
Resource CD (IRCD) contains the Instructor’s Manual with
solutions to the vast majority of the end-of-chapter exercises and a Test
Item File of multiple-choice questions (approximately two per book
section). In addition, we provide PowerPoint® slides
containing all the code and figures in the text, and bulleted items
that summarize the key points in the text. Instructors can customize
the slides. The PowerPoint® slides are downloadable from www.deitel.com
and are available as part of Prentice Hall’s Companion Web Site
(www.prenhall.com/deitel)
for C++ How to Program, 4/e, which offers resources for both
instructors and students. For instructors, the Companion Web Site
offers a Syllabus Manager, which helps instructors plan courses
interactively and create online syllabi.
Students also benefit from the
functionality of the Companion Web Site. Book-specific
resources for students include:
Customizable PowerPoint®
slides
Example source code
Reference materials from the book
appendices (such as operator-precedence chart, character set and Web
resources)
Chapter-specific resources available
for students include:
Chapter objectives
Highlights (e.g., chapter summary)
Outline
Tips (e.g., Common
Programming Errors, Good Programming Practices, Portability
Tips, Performance Tips, Software Engineering
Observations and Testing and Debugging Tips)
Online Study Guide—contains
additional short-answer self-review exercises (e.g., true/false and
matching questions) with answers and provides immediate feedback to the
student
Students can track their results and
course performance on quizzes using the Student Profile
feature, which records and manages all feedback and results from tests
taken on the Companion Web Site. To access Deitel™ Companion
Web Site, visit www.prenhall.com/deitel.
C++ in the Lab
This lab manual (full title: C++ in
the Lab, Lab Manual to Accompany C++ How to Program, Fourth Edition;
ISBN 0-13-038478-X) complements C++ How to Program, 4/e, and
the optional C++ Multimedia Cyber Classroom, 4/e, by
providing a series of hands-on lab assignments designed to reinforce
students’ understanding of lecture material. This lab manual is
designed for closed laboratories, which are regularly scheduled classes
supervised by an instructor. Closed laboratories provide an excellent
learning environment because students can use concepts presented in
class to solve carefully designed lab problems. Instructors are better
able to gauge the students’ understanding of the material by monitoring
the students’ progress in lab. This lab manual also can be used for
open laboratories, homework and for self-study.
C++ in the Lab focuses on
Chapters 1–14 and 17 of C++ How to Program, 4/e. Each chapter
in the lab manual is divided into Prelab Activities, Lab
Exercises and Postlab Activities. Each chapter contains
objectives that introduce the lab’s key topics and an assignment
checklist that allows students to mark which exercises the instructor
has assigned. Each page in the lab manual is perforated, so students
can submit their answers (if required).
Solutions to the lab manual’s Prelab
Activities, Lab Exercises and Postlab Activities
are available in electronic form. Instructors can obtain these
materials from their regular Prentice Hall representatives; the
solutions are not available to students.
Prelab Activities
Prelab Activities are intended to be
completed by students after studying each chapter in C++ How to
Program, 4/e. Prelab Activities test students’
understanding of the material presented in the textbook, and prepare
students for the programming exercises in the lab session. (These
activities may be finished before or during lab, at the instructor’s
discretion.) The exercises focus on important terminology and
programming concepts and are effective for self-review. Prelab
Activities include Matching Exercises, Fill-in-the-Blank
Exercises, Short-Answer Questions, Programming-Output
Exercises (these ask students to determine what short code segment
do without actually running the program) and Correct-the-Code
Exercises (these ask students to identify and correct all errors in
short code segments).
Lab Exercises
The most important section in each
chapter is the Lab Exercises. These exercises teach students how to
apply the material learned in C++ How to Program, 4/e, and
prepare them for writing C++ programs. Each lab contains one or more
lab exercises and a debugging problem. The Lab Exercises
contain the following:
Lab Objectives highlight
specific concepts on which the lab exercise focuses.
Problem Descriptions
provide the details of the exercise and hints to help students
implement the program.
Sample Outputs
illustrate the desired program behavior, which further clarifies the
problem descriptions and aids the students with writing programs.
Program Templates take
complete C++ programs and replace key lines of code with comments
describing the missing code.
Problem-Solving Tips
highlight key issues that students need to consider when solving the
lab exercises.
Follow-Up Questions and
Activities ask students to modify solutions to lab exercises,
write new programs that are similar to their lab-exercise solutions or
explain the implementation choices that were made when solving lab
exercises.
Debugging Problems
consist of a blocks of code that contain syntax errors and/or logic
errors. These alert students to the types of errors they are likely to
encounter while programming.
Postlab Activities
Professors typically assign Postlab
Activities to reinforce key concepts or to provide students with more
programming experience outside the lab. Postlab Activities test the
students’ understanding of the Prelab and Lab Exercise material, and
ask students to apply the knowledge to creating programs from scratch.
The section provides two types of programming activities: coding
exercises and programming challenges. Coding exercises are short and
serve as review after the Prelab Activities and Lab
Exercises have been completed. These exercises ask students to
write programs or program segments using key concepts from the
textbook. Programming challenges allow students to apply the knowledge
they have gained in class to substantial programming exercises. Hints,
sample outputs and/or pseudocode are provided to aid students with
these problems. Students who complete the programming challenges for a
chapter successfully have indeed mastered the chapter material. Answers
to the programming challenges are available for download from www.deitel.com.
The C++ Multimedia Cyber
Classroom, 4/e, and The Complete C++ Training Course, 4/e
We have updated our optional interactive
multimedia version of the book—The C++ Multimedia Cyber Classroom, 4/e
(CD for Windows®)—with considerable additional audio,
including the new material on Web Programming with CGI. This resource
is loaded with electronic features that are ideal for both learning and
reference. The Cyber Classroom is packaged with the textbook at
a discount in The Complete C++ Training Course, 4/e. If you
already have the book and would like to purchase the C++ Multimedia
Cyber Classroom, 4/ e, separately, please visit www.InformIT.com/cyberclassrooms;
the ISBN number for this product is 0-13-100253-8. Deitel™ Cyber
Classrooms are generally available in CD and various popular
Web-based training formats.
The CD provides an introduction in which
the authors overview the Cyber Classroom’s features. The
textbook’s 267 Live-Code™ example C++ programs truly "come alive" in
the Cyber Classroom. If you are viewing a program and want to
execute it, you simply click the lightning-bolt icon to run the
program. You immediately will see the program’s output. If you want to
modify a program and see the effects of your changes, simply clicking
the floppy-disk icon causes the source code to be "lifted off" the CD
and "dropped into" one of your own directories so you can edit the
code, recompile the program and try out your new version. Click the
audio icon to hear one of the authors "walk you through" the code. In
addition, the Cyber Classroom contains the full-text of C++
How to Program, 4/e, in fully-searchable format.
The Cyber Classroom also
provides post-assessment exams (with answers) for each chapter in the
book. These exams are powerful features that allow users to gauge their
understanding of the programming concepts presented in the chapters.
Each exam question hyperlinks to the section in the book from which the
question was derived. This allows users to review the appropriate
chapter material before or after answering the question. A chart is
provided that summarizes the user’s exam results by chapter.
The Cyber Classroom also
provides navigational aids, including extensive additional hyperlinking
for easy navigation. The Cyber Classroom is browser based, so
it remembers sections that you have visited recently and allows you to
move forward or backward among them. The thousands of index entries are
hyperlinked to their text occurrences. Furthermore, when you key in a
term using the "find" feature, the Cyber Classroom will locate
occurrences of that term throughout the text. The Table of Contents
entries are "hot," so clicking a chapter or section name takes you
immediately to that chapter or section.
Students like the fact that solutions to
approximately half the exercises in the book are included with the Cyber
Classroom. Studying and running these extra programs is a nice way
for students to enhance their Live-Code™ learning experience.
Students and professional users of our Cyber
Classrooms tell us that they like the interactivity and that the Cyber
Classroom is a powerful reference tool. We received an e-mail from
a person who said that he lives "in the boonies" and cannot take a live
course at a university, so the Cyber Classroom provided a nice
solution to his educational needs.
Professors tell us that their students
enjoy using the Cyber Classroom, and consequently spend more
time on the courses, mastering more of the material than in
textbook-only courses. For a complete list of the available and
forthcoming Cyber Classrooms and Complete Training Courses,
see the Deitel™ Series page at the beginning of this book, the
product listing and ordering information at the end of this book or
visit www.deitel.com, www.prenhall.com/deitel
and www.InformIT.com/deitel.
Course Management Systems:
Blackboard™, WebCT™, CourseCompass and Premium CourseCompass
Selected content from the Deitels’
introductory programming language How to Program series,
including C++ How to Program, 4/e, is available to integrate
into various popular Course Management Systems, including
CourseCompass, Blackboard and WebCT. An enhanced version of
CourseCompass, called Premium CourseCompass, will be available for C++
How to Program, 4/e, in January 2003. Course Management Systems
help faculty create, manage and use sophisticated Web-based educational
tools and programs. Instructors can save hours of inputting data by
using Deitel content, created by and for educators, for various Course
Management Systems.
Blackboard, CourseCompass and WebCT
offer:
Features to create and customize an
online course, such as areas to post course information (e.g.,
policies, syllabi, announcements, assignments, grades, performance
evaluations and progress tracking), class and student management tools,
a gradebook, reporting tools, page tracking, a calendar and
assignments.
Communication tools to help create and
maintain interpersonal relationships between students and instructors,
including chat rooms, whiteboards, document sharing, bulletin boards
and private e-mail.
Flexible testing tools that allow an
instructor to create online quizzes and tests from questions directly
linked to the text, and that grade and track results effectively. All
tests can be inputted into the gradebook for efficient course
management. WebCT also allows instructors to administer timed online
quizzes.
Support materials for instructors are
available in print and online formats.
In addition to the types of tools
found in Blackboard and WebCT, CourseCompass from Prentice Hall
includes:
CourseCompass course home page, which
makes the course as easy to navigate as a book. An expandable table of
contents allows instructors to view course content at a glance and to
link to any section.
Hosting on Prentice Hall’s centralized
servers, which allows course administrators to avoid separate licensing
fees or server-space issues. Access to Prentice Hall technical support
also is available.
"How Do I" online-support sections are
available for users who need help personalizing course sites, including
step-by-step instructions for adding PowerPoint® slides,
video and more.
Instructor Quick Start Guide helps
instructors create online courses using a simple, step-by-step process.
Introducing the Premium CourseCompass
Course Management System
Premium CourseCompass integrates content
from a rich variety of sources, including Deitel Cyber Classrooms, How
to Program books and Companion Web Sites with CourseCompass
courseware—providing enhanced content to CourseCompass users. Premium
CourseCompass includes:
Pre-loaded Deitel™ Content in a
Customizable Interface. An instructor can aggregate and customize all
course materials. This feature includes the e-Book, a searchable
digital version of C++ How to Program, 4/e, including
full-color graphics and downloadable PowerPoint® slides.
All the Interactivity of the Cyber
Classroom. Students can work with code and receive the added
benefit of 17+ hours of detailed audio descriptions of thousands of
lines of code to help reinforce concepts. Every code example from C++
How to Program, 4/e, is included.
Abundant Self-Assessment and Complete Test-Item
File. Use or edit hundreds of pre-loaded assessments, or upload
your own. Assessments include self-review exercises, programming
exercises (half with answers included) and test questions. Instructors
choose which questions to assign, and students receive immediate
feedback. Instructors can collect students’ work and track their
progress in an online gradebook.
To view free online demonstrations and
learn more about these Course Management Systems, that support Deitel
content, visit the following Web sites:
Blackboard:
www.blackboard.com
and www.prenhall.com/blackboard.
WebCT:
www.webct.com
and www.prenhall.com/webct.
CourseCompass:
www.coursecompass.com
and www.prenhall.com/coursecompass.
Deitel e-Learning Initiatives
e-Books and Support for Wireless
Devices
Wireless devices will have an enormous
role in the future of the Internet. Given recent bandwidth enhancements
and the emergence of 2.5 and 3G technologies, it is projected that,
within a few years, more people will access the Internet through
wireless devices than through desktop computers. Deitel &
Associates is committed to wireless accessibility and recently
published Wireless Internet & Mobile Business How to Program. To
fulfill the needs of a wide range of customers, we currently are
developing our content both in traditional print formats and in newly
developed electronic formats, such as wireless e-books so that students
and professors can access content virtually anytime, anywhere. For
periodic updates on these initiatives subscribe to the Deitel™ Buzz
Online e-mail newsletter,
www.deitel.com/newsletter/subscribe.html or visit www.deitel.com.
e-Matter
Deitel & Associates is partnering
with Prentice Hall’s parent company, Pearson PLC, and its information
technology Web site, www.InformIT.com, to launch
the Deitel™ e-Matter series at www.InformIT.com/deitel
in Spring 2003. This series will provide professors, students and
professionals with an additional source of information on programming
and software topics. e-Matter consists of stand-alone sections taken
from published texts, forthcoming texts or pieces written during the
Deitel research-and-development process. Developing e-Matter based on
pre-publication books allows us to offer significant amounts of the
material to early adopters for use in academic and corporate courses.
Our own free newsletter, the Deitel™
Buzz Online, includes commentary on industry trends and developments,
links to free articles and resources from our published books and
upcoming publications, product-release schedules, challenges,
anecdotes, information on our corporate instructor-led training courses
and more. To subscribe, visit
www.deitel.com/newsletter/subscribe.html
Deitel Column in the InformIT
Newsletters
Deitel & Associates, Inc.,
contributes articles to two free InformIT weekly e-mail newsletters,
currently subscribed to by more than 1,000,000 IT professionals
worldwide.
Editorial Newsletter—Contains
dozens of new articles per week on various IT topics, including
programming, advanced computing, networking, business, Web development,
software engineering, operating systems and more. Deitel &
Associates contributes 2–3 articles per week taken from our extensive
content base or from material being created during our research and
development process.
Promotional Newsletter—Features
weekly specials and discounts on most Pearson publications. Each week a
new Deitel™ product is featured along with information about our
corporate instructor-led training courses.
To subscribe, visit www.InformIT.com.
The New Deitel™ Developer Series
Deitel & Associates, Inc., is making
a major commitment to covering leading-edge technologies for industry
software professionals through the launch of our Deitel™ Developer
Series. Web Services A Technical Introduction and Java Web
Services for Experienced Programmers are among the first books in
the series. These will be followed by Java 2 Enterprise Edition,
Java 2 Micro Edition, .NET A Technical
Introduction, ASP .NET with Visual Basic .NET for
Experienced Programmers, ASP .NET with C# for Experienced
Programmers and many more. Please visit www.deitel.com for
continuous updates on all published and forthcoming Deitel™
Developer Series titles.
The Deitel™ Developer Series is
divided into three subseries. The A Technical Introduction
subseries provides IT managers and developers with detailed overviews
of emerging technologies. The A Programmer’s Introduction
subseries is designed to teach the fundamentals of new languages and
software technologies to programmers and novices from the ground up;
these books discuss programming fundamentals, followed by brief
introductions to more sophisticated topics. The For Experienced
Programmers subseries is designed for seasoned developers seeking a
deeper treatment of new programming languages and technologies, without
the encumbrance of introductory material; the books in this subseries
move quickly to in-depth coverage of the features of the programming
languages and software technologies being covered.
Acknowledgments
One of the great pleasures of writing a
textbook is acknowledging the efforts of many people whose names may
not appear on the cover, but whose hard work, cooperation, friendship
and understanding were crucial to the production of the book. Many
people at Deitel & Associates, Inc. devoted long hours to this
project.
Tem Nieto, a graduate of the
Massachusetts Institute of Technology and Director of Product
Development at Deitel & Associates, co-authored Chapter 15, 20 and
22 and the "Building Your Own Compiler" Special Section in Chapter 17.
He also contributed to the Instructor’s Manual and the C++ Multimedia
Cyber Classroom, 4/e, and developed the student lab manual, C++ in
the Lab, and the corresponding instructor’s manual.
Ben Wiedermann, a graduate of Boston
University with a degree in Computer Science, was the lead developer,
programmer and writer working with Dr. Harvey M. Deitel on the UML case
study in Chapters 1–7 and 9.
Sean E. Santry, a graduate of Boston
College with degrees in Computer Science and Philosophy, is Director of
Software Development at Deitel & Associates. Sean worked on the
coding and code walkthroughs of the UML Case Study and helped certify
the technical accuracy of Chapters 2–5, 8, 9, 11, 12, 16 and 21.
Jonathan Gadzik, a graduate of the
Columbia University School of Engineering and Applied Science with a
degree in Computer Science, contributed to the "Thinking About Objects"
sections, the preface and Chapters 1, 9–14 and 16; Jon also updated all
the UML diagrams in Chapters 2, 9, 12 and 14 to version 1.4.
Cheryl Yaeger, a graduate of Boston
University with a degree in Computer Science, is Director of .NET
Development at Deitel & Associates. Cheryl helped certify the
technical accuracy of Chapters 17, 19 and 20.
Christi Kelsey, a graduate of Purdue
University with a degree in Management and a minor in Information
Systems, is Director of Business Development at Deitel &
Associates. Christi worked on the Internet and Web Resources appendix,
applied copy edits to the manuscript and contributed to the preface.
Laura Treibick, a graduate of the
University of Colorado at Boulder with a degree in Photography and
Multimedia, is Director of Multimedia at Deitel & Associates. She
enhanced many of the graphics throughout the text, consulted on the
book-cover design and audited the index.
Christina Courtemarche, a graduate of
Boston University with a degree in Computer Science, certified Chapters
9, 11, 13 and 15 for technical accuracy.
Betsy Duwaldt, Editorial Director at
Deitel & Associates, is a graduate of Metropolitan State College of
Denver with a degree in Technical Communications (Writing and Editing
Emphasis). Betsy edited the Preface and Appendix D.
Barbara Deitel applied the copy edits to
the manuscript. She did this in parallel with handling her extensive
financial and administrative responsibilities at Deitel &
Associates.
Abbey Deitel, a graduate of Carnegie
Mellon University’s Industrial Management Program and President of
Deitel & Associates, recruited additional full-time employees and
interns during 2002 and leased, equipped and furnished our new
corporate headquarters to create the work environment in which C++
How to Program, 4/e, and our other Deitel 2002 publications were
produced. She suggested the title for the How to Program series
and contributed to this preface.
We would also like to thank the
participants in the Deitel & Associates, Inc., College Internship
Program.
Emanuel Achildiev, a sophomore in
Computer Science at Northeastern University, worked on the ancillaries
for Chapters 6 and 8 and tested the example programs on several
platforms.
Kalid Azad, a senior at Princeton
University in Computer Science, worked on the book’s ancillaries,
including the PowerPoint® Instructor Lecture Notes and the
Test Item File.
Nicholas Cassie, a sophomore at
Northeastern University in Computer Science, worked on the ancillary
materials for Chapters 4, 10–12 and 14 and tested example programs on
several C++ compilers.
Thiago da Silva, a sophomore at
Northeastern University in Computer Science, tested the programs for
the entire book on many C++ compilers. He also contributed to the
online Dive-Into™ support materials that demonstrate how to
write, compile and debug programs with several C++ development
environments.
Mike Dos’Santos, a Computer Science
major at Northeastern University, produced ancillary materials for
Chapters 7, 9 and 13, and did extensive work on C++ in the Lab.
Brian Foster, a sophomore at
Northeastern University in Computer Science, tested the example
programs on several C++ compilers. He also contributed to the online Dive-Into™
support materials that demonstrate how to write, compile and debug
programs with several C++ development environments.
Audrey Lee, a graduate of Wellesley
College and a Ph.D. candidate in Computer Science at the University of
Massachusetts, Amherst, worked on the book’s ancillaries, including the
PowerPoint® Instructor Lecture Notes, the Companion Web
Site, the C++ Multimedia Cyber Classroom, 4/e, and the Test
Item File.
Jimmy Nguyen, a sophomore in Computer
Science at Northeastern University, worked on the ancillaries for
Chapters 5, 15 and 17. He also tested the book’s programs on several
C++ compilers.
Matthew Rubino, a sophomore at
Northeastern University in Computer Science, tested the programs on
several C++ compilers. He also contributed to the online Dive-Into™
support materials.
We would like to thank one of our
business colleagues who contributed to the book. Chris Poirier, an
independent consultant, co-authored Chapter 16, Web Programming with
CGI. Chris also is a FrameMaker Developer Kit (FDK) expert; he used
this product to implement the new yellow background code-highlighting
style, so crucial to enhancing the pedagogy in C++ How to Program,
4/e. We also would like to thank Justin Liberman who researched the
URLs in Appendix D.
We are fortunate to have worked on this
project with the talented and dedicated team of publishing
professionals at Prentice Hall. We especially appreciate the
extraordinary efforts of our Computer Science editor, Petra Recter and
her boss—our mentor in publishing—Marcia Horton, Editorial Director of
Prentice-Hall’s Engineering and Computer Science Division. Vince
O’Brien did a marvelous job managing the production of the book. Sarah
Burrows managed the publication of the book’s extensive ancillary
package. Pamela Shaffer, Executive Marketing Manager for Computer
Science, developed the book’s extensive marketing program.
The C++ Multimedia Cyber Classroom,
4/e, was developed in parallel with C++ How to Program, 4/e.
We sincerely appreciate the "new media" insight, savvy and technical
expertise of our electronic-media editors, Mark Taub and Karen McLean.
They, with project manager Mike Ruel, did a wonderful job publishing
the C++ Multimedia Cyber Classroom, 4/e, and The Complete
C++ Training Course, 4/e.
We owe special thanks to the creativity
of Tamara Newnam (smart_art@earthlink.net). Tammy produced the cover
and created the delightful creature who shares with you the book’s
programming tips. Barbara Deitel contributed the bugs’ names for the
front cover.
We would like to extend a special note
of thanks to Steve Clamage of Sun Microsystems, the chairman of ANSI
Technical Committee J16, the group responsible for developing and
evolving the standard for C++. Steve’s contributions to this book (and
previous editions) are profound. We benefited greatly from his
insightful comments and deep understanding of C++. Steve wants
textbooks describing C++ to be correct and he takes time from his busy
professional schedule to help us and other C++ authors "get it right."
Our sincere thanks to a consummate professional.
We wish to acknowledge the efforts of
our 52 Fourth Edition reviewers and to give a special note of
thanks to Jennifer Capello of Prentice Hall, who managed this
extraordinary review effort.
Fourth Edition Reviewers
Reviewers of C++ Material
Ammar Abuthuraya (Microsoft)
Richard Albright (University of Delaware)
Rob Andrews (Independent software
developer)
Peter Becker (Dinkumware, Ltd.)
Carl Burnham (HostingResolve.com)
Jimmy Chen (Salt Lake Community College)
Ram Choppa (Baker Hughes)
Stephen Clamage (ANSI J16 Chair; Sun
Microsystems)
Nathan Clegg (Geerbox)
Eric Crampton (Automated Trading Desk)
Timothy Culp (Harris Corporation)
Joel Davis (DinaaliSystems)
Christophe de Dinechin (Hewlett-Packard)
Vincent Drake (Borland)
Lars Marius Garshol (Ontopian)
John Godel (EPOCH Technical Services)
Ric Heishman (Northern Virginia
Community College)
Anne Horton (AT&T)
James Huddleston (Independent consultant)
Rex Jaeschke (Independent consultant)
Clark Jefcoat (ProObject)
Vivek Kajale (University of Texas,
Arlington)
Sam Kohn (New York Institute of
Technology)
Don Kostuch (You Can C Clearly Now)
Stan Kurkovsky (Columbus State
University)
Meng Lee (Co-creator of STL;
Hewlett-Packard)
Sean McGrath (Propylon)
Robert Myers (Florida State University)
Ami Neiman (DeVry University—Fremont)
David Papurt (Independent contractor;
C++ lecturer and author)
Garrett Pease (LearnFrame, Inc.)
Wolfgang Pelz (University of Akron)
Tom Pennings (Borland)
Prashant Rane (University of Texas)
Shailesh Ratadia (Microsoft)
Kroum Savadjiev (Purkinje Inc.)
Vicki Scott (Metrowerks, Inc.)
Richard Seabrook (Anne Arundel Community
College)
Gary Sibbitts (St. Louis Community
College)
Vladimir Toncar (Kerio Technologies)
Owen Urkov (Borland)
Reid Wilkes (Microsoft)
C++ How to Program, 4/e, OOD/UML Case
Study Reviewers
Brian Cook (Zurich Insurance)
Ron Felice (Omniware Development)
Terry Hull (Enterprise Component
Technologies, Inc.)
Don Kostuch (You Can C Clearly)
Grant Larsen (Rational Software)
Davyd Norris (Rational Software)
Kendall Scott (Independent consultant)
Cameron Skinner (Embarcadero
Technologies; OMG)
Mark Taube (Raytheon)
Stephen Tockey (Construx Software; OMG)
Bing Xue (Siemens Applied Automation)
Under tight deadlines, these reviewers
scrutinized every aspect of the text and made countless suggestions for
improving the accuracy and completeness of the presentation.
Contacting Deitel & Associates
We would sincerely appreciate your
comments, criticisms, corrections and suggestions for improving the
text. Please address all correspondence to:
deitel@deitel.com
We will respond promptly.
Errata
We will post all errata for the Fourth
Edition at www.deitel.com.
Customer Support
Please direct all software and
installation questions to Pearson Education Technical Support:
By phone: 1-800-677-6337
By email: media.support@pearsoned.com
On the Web: www.prenhall.com
Please direct all C++ language questions
to deitel@deitel.com.
Well, that is it for now. Welcome to the
exciting world of C++, object-oriented programming, UML, generic
programming with the STL and C++ Web programming with CGI. We hope you
enjoy this look at contemporary computer programming. Good luck!
Dr. Harvey M. Deitel
Paul J. Deitel
About the Authors
Dr. Harvey M. Deitel, Chairman and Chief
Strategy Officer (CSO) of Deitel & Associates, Inc., has 41 years
experience in the computing field, including extensive industry and
academic experience. Dr. Deitel earned B.S. and M.S. degrees from the
Massachusetts Institute of Technology and a Ph.D. from Boston
University. He worked on the pioneering virtual-memory
operating-systems projects at IBM and MIT that developed techniques now
widely implemented in systems such as UNIX, Linux and Windows XP. He
has 20 years of college teaching experience, including earning tenure
and serving as the Chairman of the Computer Science Department at
Boston College before founding Deitel & Associates, Inc., with his
son, Paul J. Deitel. He and Paul are the co-authors of several dozen
books and multimedia packages and they are writing many more. With
translations published in Japanese, Russian, Spanish, Traditional
Chinese, Simplified Chinese, Korean, French, Polish, Italian,
Portuguese, Greek, Urdu and Turkish, the Deitels’ texts have earned
international recognition. Dr. Deitel has delivered professional
seminars to major corporations, government organizations and various
branches of the military.
Paul J. Deitel, CEO and Chief Technical
Officer of Deitel & Associates, Inc., is a graduate of the
Massachusetts Institute of Technology’s Sloan School of Management,
where he studied Information Technology. Through Deitel &
Associates, Inc., he has delivered C, C++, Java, Internet and World
Wide Web courses to industry clients, including Compaq, Sun
Microsystems, White Sands Missile Range, Rogue Wave Software, Boeing,
Dell, Stratus, Fidelity, Cambridge Technology Partners, Open
Environment Corporation, One Wave, Hyperion Software, Lucent
Technologies, Adra Systems, Entergy, CableData Systems, NASA at the
Kennedy Space Center, the National Severe Storm Laboratory, IBM and
many other organizations. He has lectured on C++ and Java for the
Boston Chapter of the Association for Computing Machinery and has
taught satellite-based Java courses through a cooperative venture of
Deitel & Associates, Prentice Hall and the Technology Education
Network. He and his father, Dr. Harvey M. Deitel, are the world’s
best-selling Computer Science textbook authors.
About Deitel & Associates, Inc.
Deitel & Associates, Inc., is an
internationally recognized corporate training and content-creation
organization specializing in Internet/World Wide Web software
technology, e-business/e-commerce software technology, object
technology and computer programming languages education. The company
provides instructor-led courses on Internet and World Wide Web/
programming, wireless Internet programming, object technology, and
major programming languages and platforms, such as C, C++, Visual C++®
.NET, Visual Basic® .NET, C#, Java, Advanced Java, XML,
Perl, Python and more. The founders of Deitel & Associates, Inc.,
are Dr. Harvey M. Deitel and Paul J. Deitel. The company’s clients
include many of the world’s largest computer companies, government
agencies, branches of the military and business organizations. Through
its 27-year publishing partnership with Prentice Hall, Deitel &
Associates, Inc., publishes leading-edge programming textbooks,
professional books, interactive CD-based multimedia Cyber Classrooms,
Complete Training Courses, e-books, e-Matter,
Web-based training courses and course management systems e-content for
popular CMSs such as WebCT, Blackboard and CourseCompass. Deitel &
Associates, Inc., and the authors can be reached via e-mail at:
deitel@deitel.com
To learn more about Deitel &
Associates, Inc., its publications and its worldwide corporate on-site
curriculum, see the last few pages of this book or visit:
www.deitel.com
Individuals wishing to purchase Deitel™
books, Cyber Classrooms, Complete Training Courses and
Web-based training courses can do so through bookstores, online
booksellers and:
www.deitel.com
www.prenhall.com/deitel
www.InformIT.com/deitel
www.InformIT.com/cyberclassrooms
Bulk orders by corporations and academic
institutions should be placed directly with Prentice Hall. See the last
few pages of this book for worldwide ordering details.
The World Wide Web Consortium (W3C)
Deitel & Associates, Inc., is a
member of the World Wide Web Consortium (W3C). The W3C was founded in
1994 "to develop common protocols for the evolution of the World Wide
Web." As a W3C member, Deitel & Associates, Inc., holds a seat on
the W3C Advisory Committee (the company’s representative is our CEO,
Paul Deitel). Advisory Committee members help provide "strategic
direction" to the W3C through meetings held around the world. Member
organizations also help develop standards recommendations for Web
technologies (such as XHTML, XML and many others) through participation
in W3C activities and groups. Membership in the W3C is intended for
companies and large organizations. To obtain information on becoming a
member of the W3C visit
www.w3.org/Consortium/Prospectus/Joining
[ top ]
|