Author: Brian Overland
Publisher: Prentice Hall, 2011
Aimed at: Beginners to programming in C++
Pros: Good traditional approach
Cons: Downplays OOP
Reviewed by: Alex Armstrong
The subtitle of this book makes you feel like it might just work "A Beginner's Guide that makes you feel smart" and it's is a much better sentiment than aspiring to the great heights of being a dummy reading a dummy's guide.
The overall feel of this book is that it is a straightforward account of C++. Topics are generally introduced in the right order and this minimizes forward references to ideas not yet covered. There are very few gimmicks in the presentation and as long as you are prepared to work though the material it should succeed in teaching you C++. However if you are a complete beginner you might find some of the ideas difficult to get into you head at first. The only solution to this problem is to keep working at it and give it time.
The book starts off with some general comments on computers and computing. It then goes on to recommend that you download and install Dev-C++ or Visual Studio Express. If you want to follow the book then Dev-C++ is the best choice. From here you write your first program and start mastering the ideas of data types.
Chapter 2 moves on to the flow of control and introduces IF statements and loops. Chapter 3 specializes this to the general for loop which isn't pushed to the "clever" use of the for construct found in so many books aiming to be introductory. This is a good sign as it indicates that the author is more interesting in teaching you C++ than on demonstrating how smart he is.
Chapter 4 introduces functions in a none object oriented setting. My only criticism here is that the author gives in to the temptation to cover recursion - via the Towers of Hanoi. While recursion is important and fun it can confuse the beginner. In my opinion it is best left to a later chapter with a suitably advanced title.
Chapter 5 covers arrays and Chapter 6 the more or less related topic of pointers. Again I would advise putting off pointers till later but the coverage is fairly restrained and you do need pointers to make proper use of functions. Then on to strings and string handling and files and file handling.
From this point the book starts to deal with more advanced topics. Indeed Chapter 9 is titled "Some Advanced Programing Techniques" but these aren't what you might expect if you are waiting for objects to make an appearance. Instead it covers the command line arguments, function overloading, constants, the so far missing do-while loop , switch and exceptions. The next chapter looks at the new features introduced in C++0x, i.e. the most up-to-date version of C++.
It is only at Chapter 11 do we reach object-oriented programming and this is over half way through the book. So far we have been using C++ as just a better version of C and this isn't really its power. But object-oriented ideas are difficult so perhaps it isn't too bad to leave it so late. The idea of class is introduces by explaining that it's a sort of struct that allows functions as well as data. This works quite well. The following chapters work their way deeper into the object-oriented world: Chapter 12 is on constructors, Chapter 13 is on operator functions and it introduces the idea of references to avoid passing by value. Things are already starting to get off the topic of objects and classes. In Chapter 14 we have an explanation of dynamic memory allocation using new. This is important and practical stuff but notice we haven't covered inheritance yet.
Chapter 15 gives us two bigger examples using objects. Chapter 16 deals with the use of the standard template library. Finally Chapter 17 reaches inheritance and Chapter 18 deals with polymorphism, i.e. virtual methods. In my opinion it would be better to deal with these ideas closer to the introduction to objects and take the reader through the whole of OOP theory before exploring important practical topics that don't have much to do with OOP. Overall the result is that the book doesn't really seem to emphasis the object-oriented approach sufficiently. However this is just my opinion and you might want to disagree and get to grips with a half-hearted sort of object-oriented C++ before moving on to use it in a fully object-oriented way. If you are following a course on C++ you might well find that less academic and more practical approach easier to follow.
Apart from my worries about the downplaying of object- oriented programming, which as I have already commented might suit some beginners, the book is very good. It takes a fairly traditional approach to teaching a language but it is none the worse for this. It doesn't provide a hard line object-oriented approach but it would make a good companion to a course that did.
Recommended unless you are a complete-complete beginner or a dummy.