He visto que hay varios paradigmas diferentes en C ++ con respecto a lo que entra en el archivo de encabezado y qué al archivo cpp. AFAIK, la mayoría de las personas, especialmente aquellas con antecedentes en C, hacen:
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; }
Sin embargo, mis profesores suelen enseñar C ++ a principiantes 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
Originario de Java, también siempre me he adherido a esta segunda vía por varias razones, como que solo tengo que cambiar algo en un lugar si cambian los nombres de la interfaz o del método, que me gusta la sangría diferente de las cosas en las clases cuando miro su implementación, y creo que los nombres son más legibles en foo
comparación con foo::foo
.
Quiero recolectar ventajas y desventajas de cualquier manera. ¿Quizás hay aún otras formas?
Una desventaja de mi manera es, por supuesto, la necesidad de declaraciones anticipadas ocasionales.
foo.cpp
ahora no tiene nada que ver con sufoo
clase y debe dejarse vacío (tal vez#include
para que su sistema de compilación sea feliz).