REVIEW - Multi-Paradigm Programming using C++


Multi-Paradigm Programming using C++


Dirk Vermeir



Springer Science & Business Media (2001)




Francis Glassborow


February 2002



What do you thing a book with this title would be about? If you are familiar with the C++ literature you might expect it to cover much the same ground as Coplien's Multi-Paradigm DESIGN for C++ but more from the implementation perspective. If so, you would be very disappointed. The author lists that title in his brief bibliography that demonstrates that he knows of it, but I can find no relevance to that listing. This book is an introductory text on C++ aimed at second year students on a computer science course. It presupposes familiarity with the basic terminology. For a textbook it has one interesting characteristic, there are no end of chapter exercises, indeed there are no exercises at all.

Now if we turn to the back cover, we find an entirely different claim from that made in the Preface. Here we are told that the book is '... self-contained reference book for those studying and using C++. This matches the content and style of presentation a little better.

While this is not that bad a book, the author seems unfamiliar with numerous details of the language. For example, on page 106 we read:

Semantically, the delete and delete[] operators:

1. do nothing if the PointerExpression evaluates to 0 (the null pointer)

2. execute the destructor Typename::~Typename(), if any, on (each of) the object(s) to be deleted, i.e. the object(s) pointed to by PointerExpression; and

3. return the memory of the deleted objects to the operating system.

Note that there is an error in each of those three statements. 0 is the null pointer constant. More seriously the delete operators (as opposed to the delete expressions) do not call destructors. Saying that they do is just going to make it harder for the reader to understand overloading them. Finally, the delete operators return memory as appropriate which may well have nothing to do with the operating system and his free store.

Two pages on we come to the author's implementation of a copy assignment (for his String class). Here we have the classic unsafe version that fails when an exception is thrown. Ironically, on the next page he provides an implementation of string concatenation he does delay destruction till the end by using a temporary holder for the memory that will eventually be released.

There are many places that the author gets it right yet the errors make me think that he is not as fluent with C++ as I believe an author should be. The publisher could have provided better support by finding adequately knowledgeable reviewers, but I guess the book was reviewed by academic colleagues who knew too little of the subject to be properly qualified to do a review.

I cannot recommend this book because readers would have to know more than the author in order to spot his errors. Anyone using this book as a basic text for learning C++ would develop bad habits and a very patchy understanding. It is the very fact that he often gets things right (such as his explanation of 'definition' and 'declaration' on page 12) that makes the errors more serious - readers may well trust him because of the places where he has avoided common mistakes.

I think the major flaw with the book is the author's attempt to give complete coverage in a relatively short book (even shorter if we ignore the source code). Lippman's Essential C++ or Koenig& Moo's Accelerated C++ are much better introductions to C++ for the target readership. If you need reference works on C++ you need much more substance than you will find in this book.

Book cover image courtesy of Open Library.

Your Privacy

By clicking "Accept All Cookies" you agree ACCU can store cookies on your device and disclose information in accordance with our Privacy Policy and Cookie Policy.

By clicking "Share IP Address" you agree ACCU can forward your IP address to third-party sites to enhance the information presented on the site, and that these sites may store cookies on your device.