Volume Number: 16 (2000)
Issue Number: 12
Column Tag: Programmer's Bookshelf
The C++ Programming Language
By Paul E. Sevinç, Switzerland
Third Edition and Special Edition
A couple of months ago, Addison-Wesley published a special edition of the third edition of Bjarne Stroustrup's The C++ Programming Language [1, 2]. The special edition features two new appendices that my copy of the third edition (9th printing) does not contain. However, both appendices are freely available from Bjarne Stroustrup's home page . And except for minor differences that exist between any two printings (cf. erratas ), the contents of both editions are identical.
The book teaches Standard C++ and the C++ Standard Library, and discusses programming techniques supported by C++. In my experience, it also serves well as a reference manual.
The four main parts of the bookBasic Facilities, Abstraction Mechanisms, The Standard Library, and Design Using C++ are preceded by an introductory part, Introductory Material. All the chapters contain a section called Advice where in other books one would find a summary. With the exception of the first two chapters of the last part, all the chapters in the main parts end with exercise sections.
The advice sections just contain a list of tips (a few up to two dozen). Examples are "Use 0 rather than NULL" [1, p. 104] or "Avoid type fields" [1, p. 324]. Taken out of context, they appear to be trivial at best, but I find them to be quite valuable both while learning C++ and in practice.
The introduction consists of three chapters.
The first chapter is mostly non-technical and gives an overview of the book, recaps C++'s history, etc. Even though it gives the impression of being unimportant, I highly recommend to carefully read this chapter. It contains very interesting background material on C++.
The second and third chapter give an overview of the language and the standard library, respectively. What is quickly explained in these two chapters is explained in (much) more detail in later chapters. Readers new to C++ will most certainly not understand everything, but that is not necessary. However, who thinks of herself or himself as a C++ programmer can use these chapters as a refresher course on the one hand and as a fitness test on the other hand.
The six chapters of part I describe the language constructs that support procedural and modular programming. These two paradigms are briefly explained in chapter 2 only. Therefore, the reader shoud at least be familiar with procedural programming and the principle of information hiding.
Chapter 4 presents the built-in types as well as enumerations, declarations, and synonyms for types (typedefs). Chapter 5 treats pointers and references, arrays, and structures (records). Chapter 6 discusses expressions, statements, and comments. Chapter 7 focuses on functions, but contains some information on macros as well. Chapter 8 shows how C++ programs can be modularized with the help of namespaces and introduces exception handling. Chapter 9, finally, is about organizing C++ programs into files.
All the chapters are rather terse with mostly tiny code examples. (A notable exception is the desk-calculator example in the first section of the sixth chapter.) Since the objective is to introduce language features, and not to teach how to program, I do not think that this is a problem. On the contrary, readers familiar with C-like syntax will appreciate Stroustrup's style of quickly getting to the point. Others should not have any problems, either, even though they might need to read a section more than once in order to familiarize with the C++ syntax.
The six chapters of part II describe the language constructs that support abstract data types (ADTs), object-oriented programming (OOP), and generic programming.
Chapter 10 explains how ADTs can be defined that in their "look-and-feel" do not differ from built-in types. Chapter 11 complements chapter 10 by introducing operator overloading as well as friend functions and conversion operators. Both chapters lay the foundation of the rest of the book, in particular of chapters 12 and 15 that treat C++'s support for OOP and also introduce the OOP vocabulary. Chapter 13 and chapter 14 cover templates and exception handling, respectively.
These chapters are less terse, and the code examples are bigger as well. Readers with experience in OOP will again be happy with the pace. However, I am afraid that many OOP novices will need to look for a more gentle introduction to OOP.
The Standard Library
The seven chapters of part III present the standard library. Unlike the other four parts, I have not re-read this part for this review. (I have read the book [albeit the 1st printing] in its entirety about three years ago and have used it as a reference manual since then.)
But I remember that I had no difficulty to understand the organization and semantics of the library. Furthermore, whenever I look for a certain stream or container, I quickly find it and am able to put it to good use in my code.
Design Using C++
The three chapters of part IV, Development and Design, Design and Programming, and Roles of Classes, round off the book.
This part cannot be a replacement for a good software-engineering book on, for instance, modeling, patterns, or component orientation. Nevertheless, Stroustrup's unique relation to C++ and his many years of experience as a software developer provided him with more than enough valuable material and insights to share with the readers. In my opinion, junior developers will profit most from this part, but it is definitely of interest to senior developers as well.
In the course of the last five years, I have read quite a few books in the field of computer science & engineering. Naturally, I encountered bad, good, and also some very good ones.
Bjarne Stroustrup's The C++ Programming Language is one of those very good books. It is crammed with useful information; to such an extent that at least in the beginning one learns more about programming in general and about C++ in particular every time one re-reads a section or a chapter.
To cut a long story short, The C++ Programming Language is not only a must-read, it is a must-have for every serious C++ programmer.
-  B. Stroustrup. The C++ Programming Language. Addison-Wesley, Reading (Massachusetts), 3rd edition 1997.
-  B. Stroustrup. The C++ Programming Language. Addison-Wesley, Reading (Massachusetts), special edition 2000.
-  B. Stroustrup. Bjarne Stroustrup. Home Page
Located at <http://www.research.att.com/~bs/>.
Paul E. Sevinç became the 43rd president of the United States after Florida wasn't able to make up its mind. You can reach him at firstname.lastname@example.org.