Création de classes interdépendantes en C
Cette question explore comment créer deux classes C contenant chacune un objet de l'autre type de classe. Cependant, cette approche directe conduit à une erreur due aux références circulaires.
Implémentation directe
Considérez les fichiers d'en-tête suivants, qui tentent de définir deux classes, foo et bar , chacun avec un membre protégé de l'autre type de classe :
// bar.h #include "foo.h" class bar { foo f; }; // foo.h #include "bar.h" class foo { bar b; };
La compilation de ce code entraîne une erreur, car les deux en-têtes s'incluent et créent une référence circulaire.
Solution de contournement : déclarations avancées et pointeurs
Pour rompre ce cycle de référence, nous pouvons utiliser des déclarations avancées et des pointeurs. Les déclarations avancées nous permettent de déclarer l'existence d'une classe sans définir ses membres.
Les fichiers d'en-tête modifiés sont :
// bar.h class foo; // Forward declaration of foo class bar { foo* f; }; // foo.h class bar; // Forward declaration of bar class foo { bar* b; };
Avec ces déclarations avancées, les en-têtes peuvent s'inclure les uns les autres sans créer une référence circulaire. La définition réelle des membres de la classe est ensuite placée dans les fichiers .cpp correspondants, où les en-têtes nécessaires sont inclus.
Utiliser des pointeurs
Pour utiliser les classes avec des pointeurs , nous créons des instances de foo et bar avec des pointeurs les uns vers les autres :
// main.cpp #include "foo.h" #include "bar.h" int main() { foo myFoo; bar myBar; myFoo.f = &myBar; // Assign the address of myBar to myFoo's f myBar.b = &myFoo; // Assign the address of myFoo to myBar's b }
Cette solution de contournement nous permet de créer des classes avec des objets interdépendants à l'aide de pointeurs, rompant le cycle de référence et créant un programme valide.
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!