Cplusplus Programming
Volume Number: 16
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 [3]. And except for minor differences that exist between any two printings (cf.
erratas [3]), 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 book-Basic 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.
Introductory Material
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.
Basic Facilities
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.
Abstraction Mechanisms
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.
Conclusion
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.
References
• [1] B. Stroustrup. The C++ Programming Language. Addison-Wesley,
Reading (Massachusetts), 3rd edition 1997.
• [2] B. Stroustrup. The C++ Programming Language. Addison-Wesley,
Reading (Massachusetts), special edition 2000.
• [3] B. Stroustrup. Bjarne Stroustrup. Home Page
Located at .
______________________________
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 paul.sevinc@ubilab.org.