Różnica między implementacją klasy w pliku .h lub w pliku .cpp

Zastanawiałem się, jakie są różnice między deklarowaniem a implementacją klasy wyłącznie w pliku nagłówkowym, w porównaniu z normalnym podejściem, w którym klasa prototypowa jest w nagłówku i implementowana w skutecznym pliku .cpp.

Aby lepiej wyjaśnić, o czym mówię, mam na myśli różnice między normalnym podejściem:

// 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
}

i ajust-header podejście:

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

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

  ...
};

Mogę uzyskać główną różnicę: w drugim przypadku kod jest zawarty w każdym innym pliku, który wymaga wygenerowania większej liczby instancji tych samych implementacji, więc niejawna redundancja; podczas gdy w pierwszym przypadku kod jest kompilowany sam, a następnie każde wywołanie odnoszące się do obiektuMyClass są powiązane z wdrożeniem wclass.cpp.

Ale czy są inne różnice? Czy wygodniej jest zastosować podejście zamiast innego w zależności od sytuacji? Czytałem też gdzieś, że zdefiniowanie treści metody bezpośrednio w pliku nagłówkowym jest niejawnym żądaniem skierowanym do kompilatora, aby określić tę metodę, czy to prawda?

questionAnswers(6)

yourAnswerToTheQuestion