9780201485189

Essential C++

by
  • ISBN13:

    9780201485189

  • ISBN10:

    0201485184

  • Edition: 1st
  • Format: Paperback
  • Copyright: 1999-10-26
  • Publisher: Addison-Wesley Professional

Note: Supplemental materials are not guaranteed with Rental or Used book purchases.

Purchase Benefits

  • Free Shipping Icon Free Shipping On Orders Over $35!
    Your order must be $35 or more to qualify for free economy shipping. Bulk sales, PO's, Marketplace items, eBooks and apparel do not qualify for this offer.
  • eCampus.com Logo Get Rewarded for Ordering Your Textbooks! Enroll Now
List Price: $49.99 Save up to $12.50
  • Buy Used
    $37.49
    Add to Cart Free Shipping Icon Free Shipping

    USUALLY SHIPS IN 2-4 BUSINESS DAYS

Supplemental Materials

What is included with this book?

Summary

Gosh, but this book is short. I mean, wow. My C++ Primer is 1237 pages counting the index, title, and dedication pages. This one weighs in at just under 300 -- in boxing terms, we're talking bantamweight.

The first question, of course, is how come? Actually, there's a story to that.

I'd been pestering everyone at Disney Feature Animation for a number of years to let me work on a production. I asked directors, management types -- even Mickey, if the truth be told. In part, it was for the glamour, I suppose. Hollywood. The big screen. Also, I hold a Master of Fine Arts as well as my Comp Sci degree, and film work seemed to promise some sort of personal synthesis. What I told management, of course, was that I needed the experience in production in order to provide usable tools. As a compiler writer, I'd always been one of my own main users. It's difficult to get defensive or feel unfairly criticized when you're one of the principal complainers about your software.

The computer effects lead on the Firebird segment of Fantasia 2000 was interested in having me join the production. To kind of try things out, he asked me to write a tool to read the raw Disney camera information for a scene and generate a camera node that could be plugged in to the Houdini animation package. I wrote it in C++, of course. It worked. They liked it. I was invited to come on board.

Once on the production (thanks to Jinko and Chyuan), I was asked to rewrite the tool in Perl. The other TDs, it was explained, weren't heavy-duty programmers but knew Perl, Tcl, and so on. (TD is film industry jargon for technical director. I was the segment's software TD. There was also a lighting TD (hi, Mira) and a model TD (hi, Tim) as well as the actual computer effects animators (hi, Mike, Steve, and Tonya).) And oh, by the way, could I do this quickly, because, gosh, we have a proof of concept test to get out that the directors (hi, Paul and Gaetan) and effects supervisor (hi, Dave) are waiting on to pitch to the then head of Feature Animation (hi, Peter). No emergency, you understand, but ...

This left me in somewhat of a quandary. I can program reasonably quickly in C++ with confidence. Unfortunately, I didn't know Perl. I thought, OK, I'll read a book. But it can't be too big a book, at least not right now. And it had better not tell me too much, although I know I should know everything, only later. After all, this is show biz: The directors need a proof of concept, the artist needs a plug-in to prove the concept, and the producer -- heck, she needs a 48 hour day. I didn't need the best book on Perl -- just the right book to get me going and not steer me too far off the righteous path.

I found that book in Learning Perl by Randal Schwartz. It got me up and running, and it was fun to read. Well, as much as any computer book is fun. It leaves out gobs of good stuff. At the time, though, I didn't need all that stuff -- I needed to get my Perl scripts working.

Eventually, I realized sadly that the third edition of C++ Primer could no longer fill a similar role for someone needing to learn C++. It had just become too big. I think it's a grand book, of course -- particularly with Josee Lajoie coming on board as co-author of the third edition. But it's too comprehensive for this kind of just-in-time C++ language learning. That's why I decided to write this book.

You're probably thinking, but C++ is not Perl. That's correct. And this text is not Learning Perl. It's about learning C++. The real question is, How does one shed almost a thousand pages and still claim to be teaching anything?

  1. Level of detail. In computer graphics, level of detail refers to how sharply an image is rendered. The invading Hun on horseback in the left front corner of the screen needs a face with eyes, hair, five o'clock shadow, clothes, and so on. The Hun way back there -- no, not the rock, silly -- well, we don't render both images with the same care for detail. Similarly, the level of detail in this book is clamped down considerably. C++ Primer, in my opinion, has the most complete but readable discussion of operator overloading in existence (I can say that because Josee was the author). However, it takes 46 pages of discussion and code examples. Here, I take 2 pages.
  2. Core language. When I was editor of the C++ Report, I used to say that half the job of editing the magazine was in deciding what not to put in. The same is true for this text. The text is organized around a series of a programming problems. Language features are introduced to provide a solution to individual problems. I didn't have a problem that multiple or virtual inheritance could solve, so I do not discuss them. To implement an iterator class, however, I had to introduce nested types. Class conversion operators are easy to misuse and are complicated to explain. I therefore chose not to present them. And so on. The choice and order of presentation of language features are always open to criticism. This is my choice and my responsibility.
  3. Number of code examples. C++ Primer has hundreds of pages of code that we step through in detail, including an object-oriented Text Query system and about a half-dozen fully implemented classes. Although this text is code-driven, the set of code examples is simply not as rich as that of C++ Primer. To help compensate, solutions to all the program exercises are provided in Appendix A. As my editor, Deborah Lafferty, said, ''If you are trying to teach something quickly, it is helpful to have the answers at your fingertips to reinforce the learning."

Structure of This Book

The text consists of seven chapters and two appendixes. Chapter 1 provides a description of the predefined language in the context of writing a small interactive program. It covers the built-in data types, the predefined operators, the vector and string library classes, the conditional and looping statements, and the iostream library for input and output. I introduce the vector and string classes in this chapter because I encourage their use over the built-in array and C-style character string.

Chapter 2 explains how to design and use a function and walks through the many flavors of functions supported in C++: inline, overloaded, and template functions as well as pointers to functions.

Chapter 3 covers what is commonly referred to as the Standard Template Library (STL): a collection of container classes, such as a vector, list, set, and map, and generic algorithms to operate on those containers, such as sort(), copy(), and merge(). Appendix B presents an alphabetical listing of the most commonly used generic algorithms and provides an example of how each one is used.

As a C++ programmer, your primary activity is the delivery of classes and object-oriented class hierarchies. Chapter 4 walks through the design and use of the C++ class facility to create data types specific to your application domain. For example, at Dreamworks Animation, where I do some consulting work, we design classes to do four-channel compositing of images and so on. Chapter 5 explains how to extend class design to support families of related classes in object-oriented class hierarchies. Rather than design eight independent image compositing classes, for example, we define a compositing hierarchy using inheritance and dynamic binding.

Class templates are the topic of Chapter 6. A class template is a kind of prescription for creating a class in which one or more types or values are parameterized. A vector class, for example, may parameterize the type of element it contains. A buffer class may parameterize not only the type of element it holds but also the size of its buff

Author Biography

Stanley B. Lippman is Architect with the Visual C++ development team at Microsoft. Previously, he served as a Distinguished Consultant at the Jet Propulsion Laboratories (JPL). Stan spent more than twelve years at Bell Laboratories, where he worked with Bjarne Stroustrup on the original C++ implementation and the Foundation research project. After Bell Laboratories, Stan worked at Disney Feature Animation, originally as principal software engineer, then as software technical director on Fantasia 2000.

0

Table of Contents

Preface ix
Structure of This Book xi
A Note on the Source Code xi
Acknowledgments xii
Where to Find More Information xii
Typographical Conventions xiii
Basic C++ Programming
1(34)
How to Write a C++ Program
1(6)
Defining and Initializing a Data Object
7(3)
Writing Expressions
10(5)
Writing Conditional and Loop Statements
15(7)
How to Use Arrays and Vectors
22(4)
Pointers Allow for Flexibility
26(4)
Writing and Reading Files
30(5)
Procedural Programming
35(32)
How to Write a Function
35(6)
Invoking a Function
41(9)
Providing Default Parameter Values
50(3)
Using Local Static Objects
53(2)
Declaring a Function Inline
55(1)
Providing Overloaded Functions
56(2)
Defining and Using Template Functions
58(2)
Pointers to Functions Add Flexiblity
60(3)
Setting Up a Header File
63(4)
Generic Programming
67(32)
The Arithmetic of Pointers
68(5)
Making Sense of Iterators
73(3)
Operations Common to All Containers
76(1)
Using the Sequential Containers
77(4)
Using the Generic Algorithms
81(2)
How to Design a Generic Algorithm
83(7)
Using a Map
90(1)
Using a Set
91(2)
How to Use Iterator Inserters
93(2)
Using the iostream Iterators
95(4)
Object-Based Programming
99(36)
How to Implement a Class
100(4)
What Are Class Constructors and the Class Destructor?
104(5)
What Are mutable and const?
109(4)
What Is the this Pointer?
113(2)
Static Class Members
115(3)
Building an Iterator Class
118(5)
Collaboration Sometimes Requires Friendship
123(2)
Implementing a Copy Assignment Operator
125(1)
Implementing a Function Object
126(2)
Providing Class Instances of the iostream Operators
128(2)
Pointers to Class Member Functions
130(5)
Object-Oriented Programming
135(32)
Object-Oriented Programming Concepts
135(3)
A Tour of Object-Oriented Programming
138(4)
Polymorphism without Inheritance
142(3)
Defining an Abstract Base Class
145(3)
Defining a Derived Class
148(7)
Using an Inheritance Hierarchy
155(2)
How Abstract Should a Base Class Be?
157(1)
Initialization, Destruction, and Copy
158(2)
Defining a Derived Class Virtual Function
160(4)
Run-Time Type Identification
164(3)
Programming with Templates
167(24)
Parameterized Types
169(2)
The Template Class Definition
171(1)
Handling Template Type Parameters
172(2)
Implementing the Template Class
174(6)
A Function Template Output Operator
180(1)
Constant Expressions and Default Parameters
181(4)
Template Parameters as Strategy
185(2)
Member Template Functions
187(4)
Exception Handling
191(14)
Throwing an Exception
191(2)
Catching an Exception
193(1)
Trying for an Exception
194(4)
Local Resource Management
198(2)
The Standard Exceptions
200(5)
Appendix A: Exercise Solutions 205(50)
Appendix B: Generic Algorithms Handbook 255(16)
Index 271

Supplemental Materials

What is included with this book?

The New copy of this book will include any supplemental materials advertised. Please check the title of the book to determine if it should include any access cards, study guides, lab manuals, CDs, etc.

The Used, Rental and eBook copies of this book are not guaranteed to include any supplemental materials. Typically, only the book itself is included. This is true even if the title states it includes any access cards, study guides, lab manuals, CDs, etc.

Excerpts

Gosh, but this book is short. I mean, wow. MyC++ Primeris 1237 pages counting the index, title, and dedication pages. This one weighs in at just under 300 -- in boxing terms, we're talking bantamweight. The first question, of course, is how come? Actually, there's a story to that. I'd been pestering everyone at Disney Feature Animation for a number of years to let me work on a production. I asked directors, management types -- even Mickey, if the truth be told. In part, it was for the glamour, I suppose. Hollywood. The big screen. Also, I hold a Master of Fine Arts as well as my Comp Sci degree, and film work seemed to promise some sort of personal synthesis. What I told management, of course, was that I needed the experience in production in order to provide usable tools. As a compiler writer, I'd always been one of my own main users. It's difficult to get defensive or feel unfairly criticized when you're one of the principal complainers about your software. The computer effects lead on the Firebird segment ofFantasia 2000was interested in having me join the production. To kind of try things out, he asked me to write a tool to read the raw Disney camera information for a scene and generate a camera node that could be plugged in to the Houdini animation package. I wrote it in C++, of course. It worked. They liked it. I was invited to come on board. Once on the production (thanks to Jinko and Chyuan), I was asked to rewrite the tool in Perl. The other TDs, it was explained, weren't heavy-duty programmers but knew Perl, Tcl, and so on. (TD is film industry jargon for technical director. I was the segment's software TD. There was also a lighting TD (hi, Mira) and a model TD (hi, Tim) as well as the actual computer effects animators (hi, Mike, Steve, and Tonya).) And oh, by the way, could I do this quickly, because, gosh, we have a proof of concept test to get out that the directors (hi, Paul and Gaetan) and effects supervisor (hi, Dave) are waiting on to pitch to the then head of Feature Animation (hi, Peter). No emergency, you understand, but ... This left me in somewhat of a quandary. I can program reasonably quickly in C++ with confidence. Unfortunately, I didn't know Perl. I thought, OK, I'll read a book. But it can't be too big a book, at least not right now. And it had better not tell me too much, although I know I should know everything, only later. After all, this is show biz: The directors need a proof of concept, the artist needs a plug-in to prove the concept, and the producer -- heck, she needs a 48 hour day. I didn't need the best book on Perl -- just the right book to get me going and not steer me too far off the righteous path. I found that book inLearning Perlby Randal Schwartz. It got me up and running, and it was fun to read. Well, as much as any computer book is fun. It leaves out gobs of good stuff. At the time, though, I didn't need all that stuff -- I needed to get my Perl scripts working. Eventually, I realized sadly that the third edition ofC++ Primercould no longer fill a similar role for someone needing to learn C++. It had just become too big. I think it's a grand book, of course -- particularly with Josee Lajoie coming on board as co-author of the third edition. But it's too comprehensive for this kind of just-in-time C++ language learning. That's why I decided to write this book. You're probably thinking, but C++ is not Perl. That's correct. And this text is notLearning Perl. It's about learning C++. The real question is, How does one shed almost a thousand pages and still claim to be teaching anything? Level of detail.In computer graphics,level of detailrefers to how sharply an image is rendered. The invading Hun on horseback in the left front corner of the screen needs a face with eyes, hair, five o'clock shadow, clothes, and so on. The Hun way back there -- no, not the

Rewards Program