Deve-se usar declarações de encaminhamento em vez de incluir sempre que possíve

Sempre que uma declaração de classe usa outra classe apenas como ponteiros, faz sentido usar uma declaração de encaminhamento de classe em vez de incluir o arquivo de cabeçalho para evitar preventivamente problemas com dependências circulares? então, em vez de ter:

//file C.h
#include "A.h"
#include "B.h"

class C{
    A* a;
    B b;
    ...
};

faça isso:

//file C.h
#include "B.h"

class A;

class C{
    A* a;
    B b;
    ...
};


//file C.cpp
#include "C.h"
#include "A.h"
...

Existe alguma razão para não fazer isso sempre que possíve

questionAnswers(18)

yourAnswerToTheQuestion