#include
minimalistically. The reason behind an include should be that, if removed, the code doesn't compile.
Don't #include
when you can forward-declare. If "Class A;" will suffice, don't #include a.h
.
In particular, prefer to forward-declare in header files, avoiding nested includes which generate highly coupled mega-include files.
See also Self-sufficient header files, in a related question.