Deux classes se référençant mutuellement
La création de deux classes C contenant chacune directement un objet de l'autre type n'est pas possible en raison de question de référence circulaire. Cependant, une solution de contournement consiste à utiliser des pointeurs pour faire référence les uns aux autres.
Déclarations Forward et utilisation des pointeurs
Pour y parvenir, utilisez des déclarations forward dans les fichiers d'en-tête pour établir le existence de l'autre classe sans la définir :
// bar.h class foo; // Say foo exists without defining it. class bar { public: foo* getFoo(); protected: foo* f; };
// foo.h class bar; // Say bar exists without defining it. class foo { public: bar* getBar(); protected: bar* f; };
Ensuite, dans les fichiers .cpp respectifs, incluez l'autre en-tête pour définir complètement la classe :
// bar.cpp #include "foo.h" foo* bar::getFoo() { return f; }
// foo.cpp #include "bar.h" bar* foo::getBar() { return f; }
Cette approche brise la boucle de référence circulaire car les déclarations directes permettent aux classes de reconnaître l'existence de chacune sans inclure leurs en-têtes, évitant ainsi les problèmes d'espace infini pour les objets.
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!