Мне было интересно узнать, какие различия между объявлением и реализацией класса исключительно в файле заголовка, по сравнению с обычным подходом, в котором вы протиперуете класс в заголовке и реализуете эффективный файл .cpp.
Чтобы лучше объяснить то, о чем я говорю, я имею в виду различия между обычным подходом:
// 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
}
и подход с просто заголовком:
// File class.h
class MyClass
{
private:
//attributes
public:
void method1(...)
{
//implementation
}
void method2(...)
{
//implementation
}
...
};
Я могу получить основное различие: во втором случае код входит в каждый другой файл, который нуждается в нем, генерирует больше экземпляров одних и тех же реализаций, поэтому подразумевается избыточность; в то время как в первом случае код скомпилирован сам по себе, а затем каждый вызов, относящийся к объекту MyClass
, связан с реализацией в class.cpp
.
Но есть ли другие отличия? Удобнее ли использовать подход вместо другого в зависимости от ситуации? Я также где-то читал, что определение тела метода непосредственно в файле заголовка является неявным запросом к компилятору, чтобы встроить этот метод, верно ли это?