Start with the fact that knowledge and understanding are different things. You want to understand what Stroustrup is teaching, not merely recite facts from him. To that end, focus your practice around the concepts that you are learning at the moment. When you are learning about polymorphism, apply it in a small project or two until the little light bulb goes off in your head and you "get it".
The idea here is to target your practice around the theory you are learning. When you are pulling your practice from other sources, you might not be practicing the right thing. There are two levels of understanding any theory, and both are quite important:
- Understanding how to apply the theory. You need to know what it looks like in code, and what it does for you.
- Understanding when to apply the theory. You need to know when the theory doesn't match the problem at hand (sometimes more important than knowing when it does). You need to know what other issues can arise when you apply the theory. Not every bit of theory needs to be applied with every bit of code.
My personal approach is to do the following:
- Learn about the theory.
- Create some code that uses the theory until I understand what it can do for me.
- Force the theory in places I normally wouldn't so I can understand the limitations of where and when to apply that theory.
- Repeat cycle until I get enough related theory working together. At this point I take what I've learned and put the pieces together in a way that makes the most sense.