Hola y gracias por leer. Esto podría ser simplemente pertenecientes a la categoría de las 'preferencias personales pero de todos modos aquí vamos ...Defining constructor en archivo de cabecera VS implementación (.cpp) archivo
puedo definir el cuerpo de un constructor de clase de la clase de archivos .h o en el archivo de implementación .cpp . Estos dos estilos son probablemente idénticos en lo que respecta al compilador dentro de un proyecto específico (proyecto para mí significa dll). Lo mismo se aplica realmente a las funciones de los miembros: se pueden definir en el archivo de encabezado o simplemente declararse allí y luego definirse en el archivo cpp.
Sin embargo ...
He descubierto que si tengo que incluir el archivo de cabecera dicha clase (s) en diferentes proyectos (lo que significa que en última instancia, el código que utiliza el archivo de cabecera termina en un diferente DLL) luego tener la implementación real en el archivo de encabezado causa algunos dolores de cabeza en la compilación (no en la vinculación ... ni siquiera llego a ese punto). ¿Por qué? Bueno, no voy a ir demasiado en detalle, pero el compilador, obviamente, trata de resolver todas las funciones que podrían definirse en otros archivos de encabezado, etc ... forzando al desarrollador deficiente a comenzar a tirar varios archivos de encabezado eetc ...
LONGSTORY corto:
¿No es siempre mejor mantener los archivos de encabezado libres de cualquier implementación y simplemente usarlos para 'declaraciones'? Eso haría que sea más fácil incluirlos en más de un proyecto sin tener que llevar una gran cantidad de basura adicional.
¿Cuál es su opinión al respecto? Gracias!
Incluso hay instancias en las que puede poner una implementación en el encabezado. Digamos que si dos archivos diferentes debían incluirse entre sí, eso no se puede hacer en el encabezado, debe hacerse en el cpp. –
Quiere decir "no puedo", no "puede". De lo contrario, un buen punto. – Thomas
La excepción 'trivial' se puede aplicar tan fácilmente a un constructor trivial. No hay razón para tratarlos de manera diferente o para no incluirlos también. –