Diferencia entre implementar una clase dentro de un archivo .h o en un archivo .cpp

Me preguntaba cuáles son las diferencias entre declarar e implementar una clase únicamente en un archivo de encabezado, en comparación con el enfoque normal en el que se crea una clase en el encabezado y se implementa en un archivo .cpp efectivo.

Para explicar mejor de qué estoy hablando, me refiero a las diferencias entre el enfoque normal:

// File class.h
class MyClass 
{
private:
  //attributes
  public:
  void method1(...);
  void method2(...);
  ...
};

//file class.cpp
#include "class.h"

void MyClass::method1(...) 
{
  //implementation
}

void MyClass::method2(...) 
{
  //implementation
}

y unencabezado justo enfoque:

// File class.h
class MyClass 
{
private:
  //attributes
public:
  void method1(...) 
  {
      //implementation
  }

  void method2(...) 
  {
    //implementation
  }

  ...
};

Puedo obtener la principal diferencia: en el segundo caso, el código se incluye en todos los demás archivos que lo necesiten, generando más instancias de las mismas implementaciones, por lo que es una redundancia implícita; mientras que en el primer caso, el código se compila solo y luego cada llamada se refiere al objeto deMyClass están vinculados a la implementación enclass.cpp.

Pero ¿hay otras diferencias? ¿Es más conveniente utilizar un enfoque en lugar de otro dependiendo de la situación? También he leído en alguna parte que definir el cuerpo de un método directamente en un archivo de encabezado es una solicitud implícita para que el compilador incluya ese método, ¿es cierto?

Respuestas a la pregunta(6)

Su respuesta a la pregunta