includes - headers c++>
(C++) ¿Toda la clase en el archivo.h? (5)
Depende de cómo estás vinculando. Para evitar tener que ver mensajes como la redefinición de bla, la definición anterior en el archivo blah.h en la línea 13 simplemente coloca todo excepto la declaración en un archivo .cpp.
Si estoy creando una clase con funciones pequeñas que no hacen mucho, ¿es aceptable simplemente ponerlas todas en el archivo de encabezado? Entonces, para una clase en particular, solo es el .h sin .cpp.
Depende de lo que estás buscando.
Para un proyecto de mascota, es aceptable, pero todo es realmente.
Para un proyecto real, debe hacerse una serie de preguntas:
- ¿tienes pocas dependencias? (sí)
- ¿Es probable que tu lógica / implementación cambie a menudo? (no, o ve la próxima pregunta)
- ¿Cuánto depende de esta clase? (no mucho o mucho pero no cambiará)
Si las respuestas te satisfacen, entonces adelante.
Se trata principalmente de una cuestión de gestión de la dependencia. Al poner la definición de métodos dentro del encabezado, es probable que el compilador los agregue, lo que significa que cada vez que cambien, tendrán que volver a compilar todo lo que dependa de esta clase.
Las plantillas lo hacen, sin embargo, las plantillas generalmente tienen pocas dependencias (otras incluyen) y usted está relativamente obligado a proceder de ese modo (aunque puede externalizar el código que no depende de la plantilla para reducir las dependencias).
Para proyectos realmente grandes donde la gestión de la dependencia es primordial, entonces desaconsejaría. En esos proyectos, un ABI estable y la capacidad de promover cambios binarios compatibles son salvavidas en caso de problema y valen la pena el inconveniente "leve" para el desarrollador.
En cualquier caso, no defina los métodos en medio de la clase. Incluso en línea, puede definirlos después de la declaración de clase. Esto hace que sea más fácil para las personas que lo leen (usted mismo en unos pocos meses) obtener rápidamente la interfaz.
Estaría bien si va a usar ese archivo de encabezado en sus futuros códigos o proyectos, y si desea compartirlo con los demás.
Sí, es aceptable. Además, si hace plantillas y no tiene un compilador con soporte de export
entonces no tiene otra opción.
Sin embargo, tenga en cuenta que puede aumentar las dependencias y hacer que la compilación sea más lenta.
Sí, eso es aceptable. Ciertamente compilará. Pero también, si hace que la organización del código sea más limpia, eso puede ser bueno. La mayoría de las definiciones de plantilla ya son así por necesidad, por lo que no está haciendo nada inaudito. Sin embargo, puede haber algunos inconvenientes de que la clase dependa de otras clases. Si termina teniendo que incluir toda la definición en otros archivos que usan la clase, puede incurrir en tiempo de compilación adicional en comparación con solo tener una breve declaración de clase.
Puede medir sus tiempos de compilación si esto parece ser una preocupación real.
Si puede obtener una copia, el lenguaje de programación c ++ (y muchos otros libros) tienen una sección detallada sobre la organización del código fuente y los beneficios específicos de separar el código en archivos .h y .cpp.