I'll define only one class per file. The intent of this statement is that each file will declare only one class intended for use by client code. Additional classes used only by the main class may go in the same header file. Details Specifically, I'll include only the header files that are necessary to compile the class definition. Any that are needed only by the implementation can be included in the class implementation file.
Forward declarations can also help to reduce header-file nesting.
Rationale The more nested includes, the longer it takes to compile each file, and the greater the number of files that will have to be recompiled when a given header file changes. Though that's inevitable in any project above the toy level, it's much kinder to users to minimize that as far as possible. I'll use forward declarations to minimize header-file nesting. But it is. To this I would add that, to compile the function declaration, the compiler doesn't need to know anything about B other than that it's a type.