 <p>I can only once again point to <a href="http://www.research.att.com/~bs/new_learning.pdf" rel="nofollow noreferrer">Stroustrup</a> and preach: Don't teach the C subset! It's important, but not for beginners! C++ is complex enough as it is and the standard library classes, especially the STL, is much more important and (at least superficially) easier to understand than the C subset of C++.</p> <p>Same goes for pointers and heap memory allocation, incidentally. Of course they're important but only after having taught the STL containers.</p> <p>Another important concept that new students have to get their head around is the concept of different compilation units, the One Definition Rule (because if you don't know it you won't be able to decypher error messages) and headers. This is actually quite a barrier and one that has to be breached early on.</p> <p>Apart from the language features the most important thing to be taught is how to understand the C++ compiler and how to get help. Getting help (i.e. knowing how to search for the right information) in my experience is the single most important thing that has to be taught about C++.</p> <p>I've had quite good experiences with this order of teaching in the past.</p> <p>/EDIT: If you happen to know any German, take a look at <a href="http://madrat.net/coding/cpp/skript" rel="nofollow noreferrer">http://madrat.net/coding/cpp/skript</a>, part of a <em>very</em> short introduction used in one of my courses.</p>