I have a pretty good C++ book that says that every good C++ programmer should be a good C programmer first.
C++ is an enhanced C. You really should be good at C before you move on to C++. That way, you also better understand when to use it, and when NOT to use it. OO programming has its drawbacks for many simple tasks, and OO programming only
really shines with large, group projects. Learning how to make good, structured programs resusable is a major step towards understanding OOP.
I'd recommend learning a bit about OS architecture, too. C is about processing data, but if you know how the OS works, you may find there's already tools out there that do the job so you don't end up re-inventing everything. I recommend this book for budding programmers, especially those that don't really know why Linux is so popular for servers:
UNIX Programming. I just wish he didn't dump on Microsoft so much. It's unprofessional. He also mentions the Amiga in the book, but compares it more to OS/2, which I find a bit strange. I used OS/2 for a few years, and while I liked it, I didn't find it Amiga-like at all.
While learning C++, you are faced with the aditional problem that almost no book teaches you how to properly design an OO-program.
Indeed, documentation is pretty poor. I have the same problem with Perl books. Why people still parse their own CGI data manually and use fully exposed regex statements instead of subroutines is beyond me.
That's one nice thing about Java. The docuentation is excellent. Too bad Java just works so poorly in practice.