если писать реализацию методов прямо внутри класса то код этих методов будет типа встроенным, как бы вставляться прямо в код.
Лучше такие методы делать для элементарных операций, типа получить указатель, или ещё что элементарное.
class Vec3{
public:
Vec3(){x=y=z=0.f;}
float x,y,z;
float* getPtr(){ return &x; } // нормальный встроенный метод
};
В .cpp файле надо делать #include "файл с классом".
Может такое быть что в методах класса используются сложные вещи (которые требуют подключения других .h файлов). Тогда реализацию методов делают в отдельном .cpp файле, чтобы потом не мучится с повсеместным указанием ненужных #include и долгой компиляцией.
class CWidget{
public:
...
void Update();
};
...далее в .cpp файле
void CWidget::Update()
{
SuperType * object = MegaLibrary::GetSomething(); // вещи из другой библиотеки
// #include "MegaLibrary.h" придётся заинклюдить только в этом .cpp файле
}
Так-же поля класса можно скрыть от пользователя (инкапсуляция). Создать абстрактный класс, и отдельный класс потомком с реализацией.