It's has been mentioned earlier and I will repeat it:
Apart from reading a book(doesn't matter how good that book would be), you should learn from others code! Learn design patterns in process.
Another really good way to learn is to take someone's code, compile it to see if it works, then change something and compile it again, pay attention to compiler generated errors and warnings, fix the problems and run the program, then repeat this cycle again.