2010-04-05 19 views
6

¿Deberían declararse todas las estructuras y clases en el archivo de encabezado? Si declaro una estructura/clase en un archivo fuente, ¿qué debo poner en el archivo de encabezado para que se pueda usar en otros archivos? Además, ¿hay algún recurso que muestre algunas prácticas estándar de C++?¿Dónde declarar estructuras, etc.?

Respuesta

5

¿Deberían declararse todas las estructuras y clases en el archivo de encabezado?
Sí. EDITAR: Pero sus implementaciones deben estar en archivos cpp. En ocasiones, los usuarios que provienen de C# o Java no se dan cuenta de que la implementación en C++ puede estar completamente separada de la declaración de clase.

Si declaro una estructura/clase en un archivo de origen, ¿qué debo poner en el archivo de encabezado para que se pueda usar en otros archivos?
No puede. El compilador necesita la declaración completa de una clase disponible en cualquier unidad de traducción que use esa clase.

Además, ¿hay algún recurso que muestre algunas prácticas estándar de C++?
Puede descargar la fuente de cualquier cantidad de aplicaciones de código abierto para ver. Aunque la única cosa completamente consistente que es probable que veas es el uso de guardias de encabezado y mantener todas las declaraciones en los archivos de encabezado.

+4

Una estructura no necesita ser archivos de encabezado si no hay intención de usarlo en algún otro archivo fuente. Un functor escrito para el algoritmo STL es uno de esos ejemplos. – Naveen

+3

Uso muchas estructuras que son detalles de implementación. Están declaradas en los archivos .cpp. –

+1

-1. Naveen y Neil han explicado por qué las estructuras * ALL * no deben declararse en los encabezados. Sí a las preguntas de OP da una respuesta engañosa, particularmente para los novatos. –

2

El objetivo de los archivos de encabezado es declarar las interfaces que se deben compartir en otros archivos fuente. A menudo, las personas declaran tipos abstractos en los archivos de encabezado y los implementan en los archivos fuente según sea necesario. Esto significa, por supuesto, que el tipo recién implementado solo estará disponible para ese archivo fuente particular. Si necesita usar un tipo en varios archivos (que generalmente es el caso), necesitará usar archivos de encabezado.

C++ faq es generalmente un gran recurso para las mejores prácticas.

Cuestiones relacionadas