Ho visto che ci sono diversi paradigmi in C ++ riguardo a ciò che va nel file header e cosa al file cpp. AFAIK, la maggior parte delle persone, in particolare quelle di origine C, fanno:
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; }
Tuttavia, i miei docenti di solito insegnano C ++ ai principianti in questo modo:
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
Originario di Java, mi sono sempre attenuto a questo secondo modo per diversi motivi, come quello di cambiare qualcosa in un posto solo se cambiano i nomi dell'interfaccia o del metodo, che mi piace la diversa rientranza delle cose nelle classi quando guarda la loro implementazione e che trovo nomi più leggibili foo
rispetto a foo::foo
.
Voglio raccogliere pro e contro in entrambi i modi. Forse ci sono ancora altri modi?
Uno svantaggio della mia strada è ovviamente la necessità di occasionali dichiarazioni a termine.
foo.cpp
ora non ha nulla a che fare con la tuafoo
classe e dovrebbe essere lasciato vuoto (forse#include
per rendere felice il tuo sistema di compilazione).