Toutes les structures et classes doivent-elles être déclarées dans le fichier d'en-tête? Si je déclare une structure/classe dans un fichier source, que dois-je mettre dans le fichier d'en-tête pour qu'il puisse être utilisé dans d'autres fichiers? Aussi, y a-t-il des ressources qui montrent des pratiques standard de C++?Où déclarer des structures, etc.?
Répondre
Toutes les structures et classes doivent-elles être déclarées dans le fichier d'en-tête?
Oui. EDIT: Mais leurs implémentations devraient être dans des fichiers cpp. Parfois, les utilisateurs venant de C# ou Java ne réalisent pas que l'implémentation en C++ peut être complètement séparée de la déclaration de classe.
Si je déclare une structure/classe dans un fichier source, que dois-je mettre dans le fichier d'en-tête afin qu'il puisse être utilisé dans d'autres fichiers?
Vous ne pouvez pas. Le compilateur a besoin de la déclaration complète d'une classe disponible dans toute unité de traduction qui utilise cette classe.
De même, existe-t-il des ressources qui montrent certaines pratiques standard de C++?
Vous pouvez simplement télécharger la source pour n'importe quel nombre d'applications open source à voir. Bien que la seule chose complètement cohérente que vous êtes susceptible de voir est l'utilisation de gardes d'en-tête, et de garder toutes les déclarations dans les fichiers d'en-tête.
Le but des fichiers d'en-tête est de déclarer les interfaces destinées à être partagées avec d'autres fichiers sources. Souvent, les gens déclarent des types abstraits dans les fichiers d'en-tête et les implémentent dans les fichiers source si nécessaire. Cela signifie, bien entendu, que le type nouvellement implémenté ne sera disponible que pour ce fichier source particulier. Si vous devez utiliser un type sur plusieurs fichiers (ce qui est généralement le cas), vous devrez utiliser des fichiers d'en-tête.
C++ faq est généralement une excellente ressource pour les meilleures pratiques.
- 1. Où déclarer les interfaces?
- 2. Où déclarer une structure enum?
- 3. Meilleure façon de transmettre les structures typedef'd déclarer dans C89?
- 4. Où dois-je déclarer les variables statiques?
- 5. Où puis-je déclarer la classe obj
- 6. Différence dans la déclaration des structures
- 7. Quelle est l'utilité de déclarer des structures anonymes dans une structure?
- 8. déclarer des formulaires globaux
- 9. Taille des structures gérées
- 10. Sérialisation des structures
- 11. Javascript: Où sont les structures de données de haut niveau?
- 12. Où puis-je trouver des détails techniques sur les structures internes JavaScript?
- 13. Dans Code Igniter, où dois-je déclarer mes variables globales?
- 14. Projet Objective-C/Xcode: Où mettre les structures?
- 15. Où puis-je apprendre à combiner des algorithmes et des structures de données?
- 16. mémoire Allouer aux structures de pointeur à l'intérieur des structures
- 17. Où déclarer JDO Singleton PersistenceManagerFactory avec plusieurs services
- 18. Déclarer des variables de tableau
- 19. structures de taille variable avec des remorques
- 20. Libération récursive des structures C
- 21. Problèmes avec des structures avec des pointeurs vers des tableaux d'autres structures en C
- 22. Comment puis-je déclarer des tableaux dans struct?
- 23. Lier des liaisons avec des structures
- 24. Définitions formelles des classes et des structures
- 25. Passer des structures sur UDP faiblement dactylographiées
- 26. Questions concernant le tableau vectoriel des structures
- 27. Autres structures de contrôle
- 28. foward typedef structures
- 29. Où faire Conversions - Fuseaux horaires, unité de mesure, etc.
- 30. Déclarer des fonctions externes selon qu'elles existent
Une structure n'a pas besoin d'être des fichiers d'en-tête s'il n'y a aucune intention de l'utiliser dans un autre fichier source. Un foncteur écrit pour l'algorithme STL en est un exemple. – Naveen
J'utilise beaucoup de structs qui sont des détails d'implémentation - ceux-ci sont déclarés dans les fichiers .cpp –
-1 Naveen et Neil ont tous deux donné des raisons pour lesquelles les structures * ALL * ne devraient pas être déclarées dans les en-têtes. Oui aux questions du PO donne une réponse trompeuse, en particulier pour les débutants. –