2010-04-05 6 views
6

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

5

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.

+4

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

+3

J'utilise beaucoup de structs qui sont des détails d'implémentation - ceux-ci sont déclarés dans les fichiers .cpp –

+1

-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. –

2

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.

Questions connexes