I agree that books (and good web sites) are important. But it's more that you have to
work through a book-- trying out all you read, doing the exercies, really thinking about it, ... -- rather than (just) reading them.
And then you got to apply what you've learnt to solve real problems. Or rather, try to solve them. Then go back and re-read the bits you didn't quite get, and then solve the problem!
And examining good code which uses what you've learnt is also good. Not just example code, but full-on projects. As I program for a living, I get to see plenty of good (and some bad) code on a more or less daily basis. But there are open source projects whose code you can check out, if you're so minded [1].
In fact, compiling code and stepping through it with a debugger is a good way to really get code. This is one of the main ways I learn (and re-learn) information.
Andy
[1] I don't know my way round open source code well enough to make any strong suggestions. But there must be some good C++ projects on sourceforge.net, etc.
This thread might help:
"What C++ OSS project has good source code to learn from?"
http://stackoverflow.com/questions/3815029/what-c-oss-project-has-good-source-code-to-learn-from
(Does anyone have any suggestions? Ideally medium sized projects which do things using standard C++ idioms, inc. plenty of STL.)