Eu já vi que existem vários paradigmas diferentes no C ++ sobre o que entra no arquivo de cabeçalho e o que o arquivo cpp. AFAIK, a maioria das pessoas, especialmente as que têm experiência em C, fazem:
foo.h
class foo {
private:
int mem;
int bar();
public:
foo();
foo(const foo&);
foo& operator=(foo);
~foo();
}
foo.cpp
#include foo.h
foo::bar() { return mem; }
foo::foo() { mem = 42; }
foo::foo(const foo& f) { mem = f.mem; }
foo::operator=(foo f) { mem = f.mem; }
foo::~foo() {}
int main(int argc, char *argv[]) { foo f; }
No entanto, meus professores geralmente ensinam C ++ para iniciantes como este:
foo.h
class foo {
private:
int mem;
int bar() { return mem; }
public:
foo() { mem = 42; }
foo(const foo& f) { mem = f.mem; }
foo& operator=(foo f) { mem = f.mem; }
~foo() {}
}
foo.cpp
#include foo.h
int main(int argc, char* argv[]) { foo f; }
// other global helper functions, DLL exports, and whatnot
Originalmente vindo de Java, também sempre segui esse segundo caminho por várias razões, como por exemplo, que só preciso alterar algo em um só lugar se os nomes da interface ou do método mudarem, pois gosto da indentação diferente das coisas nas classes quando veja a implementação deles e acho os nomes mais legíveis em foocomparação com foo::foo.
Quero coletar prós e contras de qualquer maneira. Talvez ainda haja outras maneiras?
Uma desvantagem do meu caminho é, obviamente, a necessidade de declarações futuras ocasionais.
foo.cppagora não tem nada a ver com suafooclasse e deve ser deixado em branco (talvez,#includepara deixar seu sistema de compilação feliz).