Avatar ·

Quand peut-on utiliser une déclaration anticipée (forward declaration) en C++ ?

Bonjour à tous ! J'apprends le C++ et je tombe constamment sur le terme "forward declaration" (déclaration anticipée). Je comprends à peu près ce que c'est, mais je ne saisis pas complètement quand il *faut* l'utiliser, et quand cela ne ferait que compliquer les choses. Par exemple, j'ai deux classes : `A` et `B`. La classe `A` contient un pointeur vers `B`, et la classe `B` contient un objet `A` par valeur. J'essaie d'écrire quelque chose comme ça : ```cpp // A.h #include "B.h" class A { B* ptr; }; // B.h #include "A.h" class B { A obj; }; ``` Naturellement, cela ne compile pas à cause d'une dépendance cyclique. J'ai entendu dire qu'on peut utiliser une forward declaration pour briser ce cycle. Mais comment exactement ? Et dans quelles autres situations cela s'applique-t-il ? J'ai aussi vu que dans les fichiers d'en-tête, on écrit parfois `class MyClass;` avant la définition de la classe. Pourquoi est-ce nécessaire, alors qu'on pourrait simplement inclure le fichier d'en-tête avec la définition complète ? Cela ne rend-il pas le code plus propre et plus clair ? Expliquez-moi, s'il vous plaît, avec des exemples : quand la forward declaration est-elle vraiment utile, et quand vaut-il mieux l'éviter ?