Classes interdépendantes en C : Utilisation de déclarations directes
Tenter de créer deux classes contenant des objets du type de l'autre conduit directement à un problème de récursivité infinie. Pour y parvenir, une solution de contournement utilisant des pointeurs et des déclarations forward est nécessaire.
Dans le scénario fourni, la dépendance circulaire entre les classes foo et bar provoque une erreur. Pour résoudre ce problème, des déclarations forward sont utilisées pour annoncer l'existence de chaque classe sans la définir :
// bar.h #ifndef BAR_H #define BAR_H // Declares the existence of foo without defining it class foo; class bar { public: foo* getFoo(); protected: foo* f; }; #endif
// foo.h #ifndef FOO_H #define FOO_H // Declares the existence of bar without defining it class bar; class foo { public: bar* getBar(); protected: bar* f; }; #endif
Ces déclarations forward permettent aux en-têtes foo et bar d'être indépendants, évitant ainsi la référence circulaire. Les définitions complètes de chaque classe, y compris les membres pointeurs, sont ensuite fournies dans leurs fichiers .cpp respectifs.
Exemple d'utilisation :
#include "foo.h" #include "bar.h" int main(int argc, char **argv) { foo myFoo; bar myBar; }
Maintenant, le programme se compile avec succès car les déclarations forward permettent aux classes de se connaître indirectement. Ils peuvent désormais stocker des pointeurs les uns vers les autres, brisant le cycle et permettant la création de classes interdépendantes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!