Ho visto che ci sono diversi paradigmi in C ++ riguardo a cosa va nel file header e cosa al file cpp. AFAIK, la maggior parte delle persone, specialmente quelle provenienti da uno sfondo 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
Originariamente proveniente da Java, ho anche sempre seguito questo secondo modo per diverse ragioni, ad esempio che devo cambiare qualcosa in un posto solo se cambiano i nomi dell'interfaccia o del metodo, che mi piace il diverso rientro delle cose in classi quando osservo la loro implementazione e trovo i nomi più leggibili come foo
rispetto a foo::foo
.
Voglio raccogliere pro e contro per entrambi i modi. Forse ci sono ancora altri modi?
Uno svantaggio del mio modo di fare è ovviamente la necessità di dichiarazioni anticipate occasionali.