Como bien dices tiene que estar todo en el mismo fichero (o al menos que lo parezca). Para estos casos se suele usar la extensión <hpp> pero simplemente para ver más rápidamente a qué está haciendo referencia (pero si se usa <cpp> también funcionaría).
Para no tenerlo todo en el mismo fichero se suele crear la clase en el <clase.h> y las funciones miembro se implementan en <clase.hpp> y se incluye el <clase.hpp> dentro del <clase.h> en vez de al revés. Entonces como en el <main> incluimos <clase.h>, ya estaríamos incluyendo todo.
Para no tenerlo todo en el mismo fichero se suele crear la clase en el <clase.h> y las funciones miembro se implementan en <clase.hpp> y se incluye el <clase.hpp> dentro del <clase.h> en vez de al revés. Entonces como en el <main> incluimos <clase.h>, ya estaríamos incluyendo todo.
Código (cpp) [Seleccionar]
// clase.h
#ifndef CLASE_H // opcional
#define CLASE_H // opcional
class Clase{
};
#include "clase.hpp"
#endif // opcional