¿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
¿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.
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.
- 1. ¿De qué sirve declarar estructuras anónimas dentro de una estructura?
- 2. ¿Dónde debo declarar las variables estáticas?
- 3. ¿Dónde declarar las constantes de clase?
- 4. ¿Dónde puedo aprender cómo combinar algoritmos y estructuras de datos?
- 5. Semántica de Estructuras Volátiles
- 6. ObjectiveC: ¿dónde declarar las propiedades de instancias privadas?
- 7. En Code Igniter, ¿dónde debería declarar mis variables globales?
- 8. ¿Dónde declarar/definir constantes de alcance de clase en C++?
- 9. ¿Dónde puedo encontrar software de detección facial, algoritmos, etc.?
- 10. ¿Dónde puedo obtener especificaciones gratuitas de JPEG/JFIF/EXIF / etc.?
- 11. definiendo estructuras estáticas
- 12. Herramientas de boceto rápido para dibujar estructuras C/C++, punteros, etc.
- 13. Diferencias prácticas entre clases y estructuras en .net (no conceptual)?
- 14. Comparar estructuras tridimensionales
- 15. Estructuras anidadas
- 16. Al usar <ui: composition> templating, ¿dónde debo declarar el <f:metadata>?
- 17. Estructuras de datos para bioinformática
- 18. Declarar un consultable vacío?
- 19. Estructuras de datos en lisp
- 20. Regex para estructuras de árboles?
- 21. autocompletar, papeles, estrategias, etc
- 22. ¿Cómo puedo declarar matrices en struct?
- 23. Comparaciones de complejidad entre estructuras de datos
- 24. Malloc de matrices y estructuras dentro de una estructura
- 25. estructuras Comparando a NULL
- 26. estructuras Inicialización en C++
- 27. argumentos predeterminados para estructuras
- 28. Delphi estructuras de datos
- 29. C# estructuras de datos
- 30. Estructuras en Javascript
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
Uso muchas estructuras que son detalles de implementación. Están declaradas en los archivos .cpp. –
-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. –