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?