12 votes

Est-il possible de définir plusieurs classes dans un seul fichier .cpp ?

Je travaille sur un projet pour l'école et l'instructeur insiste pour que tout le code soit placé dans un seul fichier .cpp (pour faciliter la notation de sa part). Je voudrais définir plusieurs classes dans ce fichier. Est-ce que je vais rencontrer des problèmes en faisant cela ?

33voto

RED SOFT ADAIR Points 5762

Il n'y a pas de règle à suivre (comme en java). Vous êtes libre de placer et de nommer les classes dans les fichiers de votre choix (en dehors du suffixe).

Toutefois, il s'agit d'une autre question de savoir si ce sont de bonnes pratiques (ce n'est pas le cas !).

14voto

Brian R. Bondy Points 141769

Si, vous le pouvez. C'est facilement vérifiable.

class C
{
};

class D
{
};

int main(int argc, char**argv)
{
  return 0;
}

7voto

Carl Seleborg Points 7748

Vous pouvez parfaitement avoir plusieurs classes déclarées et définies dans le même fichier.

Il faut cependant faire attention lorsqu'une classe dépend d'une autre qui vient plus tard. Si une classe A doit être membre d'une autre classe B, le compilateur a besoin de sa déclaration complète (afin de connaître sa taille), et vous devez la placer plus haut dans le fichier. Cependant, si ce membre n'est qu'un pointeur (dont la taille est indépendante de celle de la classe pointée), une simple déclaration directe de la classe pointée suffit.

Notez qu'avec le #include c'est à peu près ce qui se passe de toute façon : le préprocesseur va "copier-coller" tous les fichiers inclus dans le fichier en cours de compilation. Pour le compilateur, c'est exactement la même chose.

6voto

aJ. Points 17014

Il n'y a aucun problème à écrire plusieurs classes dans un seul fichier. C'est seulement une question de style de gestion.

5voto

Edward Loper Points 5936

En général, vous ne devriez mettre plusieurs classes dans un seul fichier que si...

  1. Les classes sont très étroitement liées. Par exemple, si une classe définit son propre itérateur, il peut être approprié de placer cette classe d'itérateur dans le même fichier que la classe sur laquelle elle est utilisée pour itérer.

  2. Une des classes est destinée à la consommation publique, et les autres classes sont utilisées pour l'implémenter. Par exemple, ceci s'applique si vous utilisez l'idiome "pimpl", où le seul membre que la classe publique contient est un pointeur vers la classe privée. Dans ce cas, il peut être approprié de placer les classes privées/cachées dans le fichier source correspondant à la classe publique qui les utilise.

Dans les deux cas, la décision de placer les classes "public helper" (par exemple iterator) et "private helper" (par exemple pimpl) dans le même fichier source ou dans un fichier source différent doit être prise une fois pour tout le projet, et suivie de manière cohérente.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X